我试图将数据从postgresql导出到csv。
首先我创建了查询并尝试使用File - >导出来自pgadmin。导出为CSV。 CSV错误,因为它包含例如:
标题:Field1; Field2; Field3; Field4
现在,行开始很好,除了它把它放在另一行上的最后一个字段:
示例:
数据1;数据2;数据3;
数据4;
问题是我在尝试将数据导入另一台服务器时遇到错误。
数据来自我创建的视图。
我也试过
COPY view(field1,field2...) TO 'C:\test.csv' DELIMITER ',' CSV HEADER;
导出相同的文件。
我只想将数据导出到另一台服务器。
编辑:
尝试导入csv时出现错误:
错误:上一个预期列之后的额外数据。上下文复制 行动,第3行:<<<" Data1,data2等。">>
所以第一行是标题,第二行是第一行,数据减去最后一个字段,仅在第3行。
答案 0 :(得分:1)
为了您在另一台服务器中导出文件,您有两个选择:
COPY (SELECT field1,field2 FROM your_table) TO '[shared directory]' DELIMITER ',' CSV HEADER;
STDOUT
触发从目标服务器导出
COPY
。使用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;
答案 1 :(得分:0)
上述导出程序是可以的,例如:
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)