当我尝试使用分隔符|
导入数据时,收到错误:
错误:上一个预期列后的额外数据
如果我从下面的示例数据中出现问题的字段中删除双引号或单引号,我可以加载数据,但我的要求是我需要所有数据而不删除任何数据。
这是我的复制命令:
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|||||
答案 0 :(得分:0)
省略你的dample数据中的空行,我得到一个不同的错误信息9.6,即:
"
奇怪的是,自8.0版本中引入了CSV "
以来,该错误消息一直存在,所以我想知道您的数据与上面显示的数据有何不同。
错误消息很容易解释:第二行中有一个奇数引号(""
)。
由于带引号的字符串中的两个加倍引号被解释为单个双引号(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
个字符。
如果字段中需要"
个字符,请选择其他{{1}}或引用该字段,然后将{{1}}加倍。