使用COPY实用程序从.txt文件将数据导入Postgres,它失败并告诉我第二个值违反了唯一索引。但正如你所看到的,它并没有。
Re: "I'll just sue you. --Steve Jobs
Re: ?I?ll just sue you.? --Steve Jobs
错误:重复键值违反了唯一约束" subject_subject_key"
详情:Key(subject)=(Re:?我只是起诉你。? - Steve Jobs)已经存在。
我怎样才能通过这个并仍然使用COPY FROM(这很方便)?
答案 0 :(得分:2)
如果你的表是空的,那么在a.txt中重复提到的密钥。
你跳过了nex错误行,它应该告诉第二次出现的行号,看看例子:
t=# create table so38(i int,subject text primary key);
CREATE TABLE
t=# copy so38 from '/var/lib/pgsql93/a.txt';
ERROR: duplicate key value violates unique constraint "so38_pkey"
DETAIL: Key (subject)=(Re: ?I?ll just sue you.? --Steve Jobs) already exists.
CONTEXT: COPY so38, line 2
t=# \! cat /var/lib/pgsql93/a.txt
1 Re: ?I?ll just sue you.? --Steve Jobs
12 Re: ?I?ll just sue you.? --Steve Jobs
9 Re: "I'll just sue you. --Steve Jobs
这里
上下文:COPY so38,第2行
有助于识别问题。虽然它没有告诉你第一次出现的行。要检查带有重复项的行,您可以使用:
t=# \! cat -n a.txt | grep 'Re: ?I?ll just sue you.? --Steve Jobs'
1 1 Re: ?I?ll just sue you.? --Steve Jobs
2 12 Re: ?I?ll just sue you.? --Steve Jobs
这里的第一个数字是一个行号(在我的例子中为1和2)