COPY FROM表示数据违反了唯一约束条件,但它没有

时间:2017-03-29 23:29:33

标签: postgresql

使用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(这很方便)?

1 个答案:

答案 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)