我正在尝试将数据从 postgresql 导出到 csv。
首先,我创建了查询并尝试使用文件 -> 导出到 CSV 从 pgadmin 导出。 CSV 是错误的,因为它包含例如:
标题:Field1;Field2;Field3;Field4
现在,行开始很好,除了它放在另一行的最后一个字段:
示例:
数据1;数据2;数据3;
数据4;
问题是我在尝试将数据导入另一台服务器时出错。
数据来 self 创建的 View 。
我也试过
COPY view(field1,field2...) TO 'C:\test.csv' DELIMITER ',' CSV HEADER;
它导出相同的文件。
我只想将数据导出到另一台服务器。
编辑:
尝试导入 csv 时出现错误:
ERROR : Extra data after the last expected column. Context Copy actions, line 3: <<"Data1, data2 etc.">>
所以第一行是标题,第二行是第一行数据减去最后一个字段,它单独在第三行。
最佳答案
为了将文件导出到另一台服务器,您有两种选择:
- 在两台服务器之间创建共享文件夹,以便 数据库也可以访问此目录。
COPY (SELECT field1,field2 FROM your_table) TO '[共享目录]'DELIMITER','CSV HEADER;
- 使用
STDOUT
触发从目标服务器的导出复制
。使用psql
您可以运行以下命令来实现此目的 命令:
psql yourdb -c "COPY (SELECT * FROM your_table) TO STDOUT"> output.csv
编辑:解决包含换行的字段的问题 (\n
)
如果您想去掉换行符,请使用 REPLACE
函数。
示例:
SELECT E'foo\nbar';
?column?
----------
foo +
bar
(1 Zeile)
去除换行符:
SELECT REPLACE(E'foo\nbaar',E'\n','');
replace
---------
foobaar
(1 Zeile)
所以你的COPY
应该是这样的:
COPY (SELECT field1,REPLACE(field2,E'\n','') AS field2 FROM your_table) TO '[shared directory]' DELIMITER ',' CSV HEADER;
关于sql - 从 PostgreSQL 将包含换行符的数据导出为 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49486039/