Bit*_*ket 5 csv postgresql import copy
我使用的Postgres 8.4.4复制,http://www.postgresql.org/docs/8.4/static/sql-copy.html,导入CSV数据到我的数据库.我的源数据中的一些值包含双引号,这些双引号在插入时被剥离,而当我通过psql执行INSERT或UPDATE语句以测试双引号时会保留.也许给出一个关于发生了什么的线索,一些值也包含逗号,这些逗号根据需要保留.
我试图在http://www.postgresql.org/docs/8.3/interactive/sql-syntax-lexical.html中解决基于信息的问题,但没有成功.
我正在使用的复制命令是:
copy my_table (field_1, field_2, field_3 ...) from '/tmp/source.csv' with csv
Run Code Online (Sandbox Code Playgroud)
源数据使用逗号分隔符双引号.如有必要,可以更改...
"价值","另一个价值","这是"另一个"价值","不再,谢谢"
您必须引用嵌入式引号.默认值是它们的两倍,因此您的数据应为:
"value","another value","this is ""another"" value","no more, thanks"
Run Code Online (Sandbox Code Playgroud)
另一种方法是不加引号(但你必须引用逗号,如果有的话),就像
value,another value,this is "another" value,no more, thanks
Run Code Online (Sandbox Code Playgroud)
更新:这是有效的,但你必须确保引用嵌入的''(在这种情况下通过添加反斜杠)
DROP TABLE tmp.my_table CASCADE;
CREATE TABLE tmp.my_table
( field_1 varchar
, field_2 varchar
, field_3 varchar
, field_4 varchar
);
COPY tmp.my_table (field_1,field_2,field_3,field_4)
FROM STDIN
WITH CSV DELIMITER ',' QUOTE '"' ESCAPE '\'
;
"value","another value","this is \"another\" value","no more, thanks"
\.
;
SELECT * FROM tmp.my_table;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14407 次 |
最近记录: |