找回密码
 立即注册
首页 业界区 安全 PostgreSQL中的copy命令快速导入导出到平面文件CSV和TXT ...

PostgreSQL中的copy命令快速导入导出到平面文件CSV和TXT

戎玉珂 2025-8-5 15:13:13
在PostgreSQL中,利用copy命令快速导入导出数据到平面文件CSV和TXT

1,利用copy to 命令导出表数据到CSV,copy from 命令从CSV文件中导入数据到表,可以自定义,换行符。
  1. create table if not exists test_copy
  2. (
  3.         c1 int GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  4.         c2 int,
  5.         c3 varchar(50),
  6.         c4 timestamp
  7. );
  8. create table if not exists test_copy2
  9. (
  10.         c1 int GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  11.         c2 int,
  12.         c3 varchar(50),
  13.         c4 timestamp
  14. );
  15. insert into test_copy(c2,c3,c4)values(100,'abc',now());
  16. insert into test_copy(c2,c3,c4)values(200,'def',now());
  17. insert into test_copy(c2,c3,c4)values(null,'xxx',now());
  18. insert into test_copy(c2,c3,c4)values(300, null,now());
  19. insert into test_copy(c2,c3,c4)values(500, 'yyy',null);
  20. insert into test_copy(c2,c3,c4)values(600, 'zzz',now());
  21. select * from test_copy;
  22. c1|c2 |c3 |c4                     |
  23. --+---+---+-----------------------+
  24. 1|100|abc|2025-08-04 15:51:58.388|
  25. 2|200|def|2025-08-04 15:52:11.673|
  26. 3|   |xxx|2025-08-04 15:52:29.600|
  27. 4|300|   |2025-08-04 15:52:45.656|
  28. 5|500|yyy|                       |
  29. 6|600|zzz|2025-08-04 15:53:33.747|
  30. -- 导出,不指定分隔符的时,默认分隔符是","
  31. COPY test_copy TO '/usr/local/pgsql16/backup/test_copy1.csv' WITH (FORMAT csv, HEADER true);
  32. -- 导出,不指定分隔符的时,自定义分隔符
  33. COPY test_copy TO '/usr/local/pgsql16/backup/test_copy2.csv' WITH (FORMAT csv, HEADER true, DELIMITER '|');
  34. -- 导入,不指定分隔符的时,默认分隔符是","
  35. COPY test_copy2 FROM '/usr/local/pgsql16/backup/test_copy1.csv' WITH (FORMAT csv, HEADER true);
  36. -- 导入,不指定分隔符的时
  37. COPY test_copy2 FROM '/usr/local/pgsql16/backup/test_copy2.csv' WITH (FORMAT csv, HEADER true, DELIMITER '|');
  38. select * from test_copy2;
  39. c1|c2 |c3 |c4                     |
  40. --+---+---+-----------------------+
  41. 1|100|abc|2025-08-04 15:51:58.388|
  42. 2|200|def|2025-08-04 15:52:11.673|
  43. 3|   |xxx|2025-08-04 15:52:29.600|
  44. 4|300|   |2025-08-04 15:52:45.656|
  45. 5|500|yyy|                       |
  46. 6|600|zzz|2025-08-04 15:53:33.747|
复制代码
2,利用copy to 命令导出表数据到txt,copy from 命令从txt文件中导入数据到表,可以自定义,换行符,分隔符等信息。
  1. -- 导出到txt,指定 NULL为'\N'
  2. COPY test_copy TO '/usr/local/pgsql16/backup/test_copy1.txt' WITH (
  3.     FORMAT text,
  4.     DELIMITER E'\t',           -- 换行符:Tab分隔符
  5.     NULL '\N',                        -- null值处理
  6.     ENCODING 'UTF8'
  7. );
  8. -- 导出到txt,指定 NULL为'',不建议
  9. COPY test_copy TO '/usr/local/pgsql16/backup/test_copy2.txt' WITH (
  10.     FORMAT text,
  11.     DELIMITER E'\t',        -- 换行符:Tab分隔符
  12.     NULL '',                        -- null值处理
  13.     ENCODING 'UTF8'
  14. );
  15. create table if not exists test_copy3
  16. (
  17.         c1 int GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  18.         c2 int,
  19.         c3 varchar(50),
  20.         c4 timestamp
  21. );
  22. create table if not exists test_copy4
  23. (
  24.         c1 int GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  25.         c2 int,
  26.         c3 varchar(50),
  27.         c4 timestamp
  28. );
  29. --导入txt
  30. COPY test_copy3 from '/usr/local/pgsql16/backup/test_copy1.txt' WITH (
  31.     FORMAT text,
  32.     DELIMITER E'\t',           -- 换行符:Tab分隔符
  33.     NULL '\N',                        -- null值处理
  34.     ENCODING 'UTF8'
  35. );
  36. select * from test_copy3;
  37. c1|c2 |c3 |c4                     |
  38. --+---+---+-----------------------+
  39. 1|100|abc|2025-08-04 15:51:58.388|
  40. 2|200|def|2025-08-04 15:52:11.673|
  41. 3|   |xxx|2025-08-04 15:52:29.600|
  42. 4|300|   |2025-08-04 15:52:45.656|
  43. 5|500|yyy|                       |
  44. 6|600|zzz|2025-08-04 15:53:33.747|
  45. COPY test_copy4 from '/usr/local/pgsql16/backup/test_copy2.txt' WITH (
  46.     FORMAT text,
  47.     DELIMITER E'\t',           -- 换行符:Tab分隔符
  48.     NULL '',                        -- null值处理
  49.     ENCODING 'UTF8'
  50. );
  51. select * from test_copy4;
  52. c1|c2 |c3 |c4                     |
  53. --+---+---+-----------------------+
  54. 1|100|abc|2025-08-04 15:51:58.388|
  55. 2|200|def|2025-08-04 15:52:11.673|
  56. 3|   |xxx|2025-08-04 15:52:29.600|
  57. 4|300|   |2025-08-04 15:52:45.656|
  58. 5|500|yyy|                       |
  59. 6|600|zzz|2025-08-04 15:53:33.747|
复制代码
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册