从PostgreSQL将包含换行符的数据导出为CSV
我正在尝试将数据从postgresql导出到csv 首先,我创建了查询并尝试使用文件->导出到CSV从pgadmin导出。CSV是错误的,因为它包含例如: 标题:Field1;字段2;字段3;字段4 现在,行的开头很好,除了最后一个字段,它将其放在另一行上: 例如: 数据1;数据2;数据3 数据4 问题是我在尝试将数据导入另一台服务器时出错 数据来自我创建的视图 我也试过了从PostgreSQL将包含换行符的数据导出为CSV,sql,postgresql,csv,view,export,Sql,Postgresql,Csv,View,Export,我正在尝试将数据从postgresql导出到csv 首先,我创建了查询并尝试使用文件->导出到CSV从pgadmin导出。CSV是错误的,因为它包含例如: 标题:Field1;字段2;字段3;字段4 现在,行的开头很好,除了最后一个字段,它将其放在另一行上: 例如: 数据1;数据2;数据3 数据4 问题是我在尝试将数据导入另一台服务器时出错 数据来自我创建的视图 我也试过了 COPY view(field1,field2...) TO 'C:\test.csv' DELIMITER ',' CS
COPY view(field1,field2...) TO 'C:\test.csv' DELIMITER ',' CSV HEADER;
它导出相同的文件
我只想将数据导出到另一台服务器
编辑:
尝试导入csv时,我收到错误:
错误:最后一个预期列之后有额外数据。上下文副本
行动,第3行:
因此,第一行是标题,第二行是数据减去最后一个字段的第一行,仅在第三行。上述导出过程正常,例如:
t=# create table so(i int, t text);
CREATE TABLE
t=# insert into so select 1,chr(10)||'aaa';
INSERT 0 1
t=# copy so to stdout csv header;
i,t
1,"
aaa"
t=# create table so1(i int, t text);
CREATE TABLE
t=# copy so1 from stdout csv header;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself, or an EOF signal.
>> i,t
1,"
aaa"
>> >> >> \.
COPY 1
t=# select * from so1;
i | t
---+-----
1 | +
| aaa
(1 row)
为了在另一台服务器中导出文件,您有两个选项: 在两台服务器之间创建共享文件夹,以便 数据库也可以访问此目录。 将SELECT field1、field2从_表复制到“[shared directory]”分隔符“,”CSV标头 使用的STDOUT从目标服务器触发导出 复制使用psql,您可以通过运行以下命令来实现这一点 命令: psql yourdb-c将SELECT*从_表复制到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 (SELECT field1,REPLACE(field2,E'\n','') AS field2 FROM your_table) TO '[shared directory]' DELIMITER ',' CSV HEADER;
你能解释一下这到底能做什么吗?这对我来说太高级了。导出的csv在另一行中有最后一个字段,如果尝试在另一台服务器上导入,则会出现错误。请引用您获得的命令和异常,并请在其停止处生成一行csv,或者最好是三行带surronding的csv。根据错误,我假设您尝试导入数据的表中的列较少。请给我们两个表的DDL导出和导入one@AlexE. 为了让其他用户更好地找到您的问题,考虑将标题更改为更明确的内容,例如,将包含行馈送的数据作为CSV从PostgreSQL输出到远程服务器,如在OP中所说的,我尝试了复制命令,而当它工作时,它创建的CSV的最后一个字段的错误在一个新的行中,尝试导入时出现错误。是否可以编辑显示错误消息的问题?通常使用引号,甚至是强制引号?如果字段包含换行符,将避免出现错误。您可以尝试类似的方法并让我们知道吗?使用csv强制报价字段2;将选择字段1、字段2复制到“/tmp/COPY_test.csv”。考虑到field2是一个有问题的字段。我刚刚在查询中添加了2个字段,现在我有了一个包含最后3个字段的新行。您的字段是否可能包含换行符?我的意思是,即使他们这样做了,postgres也应该生成一个有效的csv文件。