【问题标题】:How to escape one doulbe quote " in data file for psql \COPY import?如何在 psql \COPY 导入的数据文件中转义一个双引号“?
【发布时间】:2018-07-12 05:38:50
【问题描述】:

制表符分隔的文本文件中有很多独立的双引号'"',需要用psql \copy 命令加载到PostgreSQL中。

如果我使用FORMAT CSV选项,我必须指定QUOTE,并且QUOTE char需要配对。

这是代码和输出,

create table t1(
  c1 varchar(20),
  n1 numeric
);

echo 'Alf_7"    5.12' > m.csv

psql> \copy t1 FROM 'm.csv' (FORMAT CSV, delimiter E'\t', NULL 'NULL', HEADER false);
ERROR:  unterminated CSV quoted field
CONTEXT:  COPY t1, line 1: "Alfa_7" 5.1

【问题讨论】:

    标签: postgresql psql


    【解决方案1】:

    使用FORMAT text 选项。那么您不必指定 QUOTE。

    psql=> \copy t1 FROM 'm.csv' (FORMAT text, delimiter E'\t', NULL 'NULL', HEADER false);
    
    COPY 1
    

    【讨论】:

    • 但是反斜杠必须被引用。 postgresql.org/docs/current/static/sql-copy.html
    • @DanielVérité,你能给我举个例子吗?
    • 示例:如果一个字段是c:\name,它将被导入为c:,后跟一个换行符,然后是ame,因为\n代表文本格式的换行符。该字段必须包含c:\\name 才能导入为c:\name,这意味着引用反斜杠。
    • 酷,谢谢@DanielVérité。如此多的极端案例。有什么好办法处理吗?
    • 通过在每个反斜杠前添加一个反斜杠。可以通过 COPY 的程序子句来完成:\copy tablename from program 'cat myfile.txt | sed -e ''s/\\/\\\\/'''
    猜你喜欢
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多