sql - 从 PostgreSQL 将包含换行符的数据导出为 CSV

标签 sql postgresql csv view export

我正在尝试将数据从 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.">>

enter image description here

所以第一行是标题,第二行是第一行数据减去最后一个字段,它单独在第三行。

最佳答案

为了将文件导出到另一台服务器,您有两种选择:

  • 在两台服务器之间创建共享文件夹,以便 数据库也可以访问此目录。

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/

相关文章:

excel - Access VBA中的转义双引号 - INSERT INTO ... SELECT

Python:写入 csv header "with open"

sql - 在 SQL 中,如何获取表中列值最低的所有行?

php - MySQL 返回结果与字符串输入类似但没有句点

sql - 数据库中的汉明距离/相似性搜索

mysql - 单个过程中的多个插入语句 - 是好是坏?

database - 导出时生成的 postgreSQL 转储文件为空

database - 两列中的任何一列总是多余的——有更好的解决方案吗?

sql - 从 rails 环境中的表中查询不同组中具有最大 id 的所有记录

php - 拉拉维尔 4 : Upload large csv using LOAD DATA INFILE without blank rows