当我尝试导入带分隔符|的数据时,收到错误:
错误:在最后一个预期列之后有额外的数据
我可以加载数据,如果我删除双引号或单引号的文件中有问题在下面的样本数据,但我的要求是我需要所有的数据,而不删除任何。
这是我的复制命令:

COPY public.dimingredient FROM '/Users//Downloads/archive1/test.txt'
DELIMITER '|' NULL AS ''  CSV HEADER ESCAPE AS '"'  ;

我的桌子:
  public.dimingredient
(
    dr_id integer NOT NULL,
    dr_loadtime timestamp(6) without time zone NOT NULL,
    dr_start timestamp(6) without time zone NOT NULL,
    dr_end timestamp(6) without time zone NOT NULL,
    dr_current boolean NOT NULL,
    casnumber character varying(100) COLLATE pg_catalog."default" NOT NULL,
    ingredientname character varying(300) COLLATE pg_catalog."default" NOT NULL,
    matchingstrategy character varying(21) COLLATE pg_catalog."default",
    percentofconfidence double precision,
    disclosurestatus character varying(42) COLLATE pg_catalog."default",
    issand character varying(1) COLLATE pg_catalog."default",
    sandmeshsize character varying(20) COLLATE pg_catalog."default",
    sandquality character varying(20) COLLATE pg_catalog."default",
    isresincoated character varying(1) COLLATE pg_catalog."default",
    isartificial character varying(1) COLLATE pg_catalog."default",
    CONSTRAINT dimingredient_pkey PRIMARY KEY (dr_id)
)

我的数据:
5144|2016-07-01 13:34:25.1001891|1900-01-01 00:00:00.0000000|9999-12-31 23:59:59.9999999|True|93834|"9-octadecenamide,n,n-bis(2-hydroxyethyl)-, (9z)"|"NO CAS MATCH FOUND"||Disclosed|||||

5145|2016-07-01 13:34:25.1001891|1900-01-01 00:00:00.0000000|9999-12-31 23:59:59.9999999|True|93834|"9-octadecenamide,n,n-bis-2(hydroxy-ethyl)-,(z)""|"NO CAS MATCH FOUND"||Disclosed|||||

最佳答案

省略dample数据中的空行,我得到了9.6中的另一个错误消息,即:

ERROR:  unterminated CSV quoted field
CONTEXT:  COPY dimingredient, line 3: "5145|2016-07-01 13:34:25.1001891|1900-01-01 00:00:00.0000000|9999-12-31 23:59:59.9999999|True|93834|..."

奇怪的是,自从CSVCOPY在版本8.0中引入以来,错误信息就一直存在,所以我想知道您的数据与上面显示的数据有什么不同。
错误信息很容易解释:第二行中有奇数个引号(")。
由于引号字符串中的两个双引号被解释为一个单双引号("转义为""),因此第二行中的字段为:
5145
2016-07-01 13:34:25.1001891
1900-01-01 00:00:00.0000000
9999-12-31 23:59:59.9999999
True
93834
9-octadecenamide,n,n-bis-2(hydroxy-ethyl)-,(z)"|NO CAS MATCH FOUND||Disclosed|||||

... 然后COPY在分析带引号的字符串时到达文件结尾。因此产生了错误。
解决方案是每个字段使用偶数个"字符。
如果您需要字段中的"字符,请选择不同的QUOTE或引用该字段并将"加倍。

关于postgresql - 错误:最后一个预期的列之后有多余的数据-COPY,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45307901/

10-13 05:20
查看更多