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