Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PostgreSQL将包含换行符的数据导出为CSV_Sql_Postgresql_Csv_View_Export - Fatal编程技术网

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

从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

我正在尝试将数据从postgresql导出到csv

首先,我创建了查询并尝试使用文件->导出到CSV从pgadmin导出。CSV是错误的,因为它包含例如:

标题:Field1;字段2;字段3;字段4

现在,行的开头很好,除了最后一个字段,它将其放在另一行上:

例如:

数据1;数据2;数据3

数据4

问题是我在尝试将数据导入另一台服务器时出错

数据来自我创建的视图

我也试过了

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文件。