2017-03-29 53 views
0

使用COPY实用程序从.txt文件将数据导入到Postgres中,并且它失败并告诉我第二个值违反唯一索引。但正如你所看到的,事实并非如此。COPY FROM说数据违反了唯一约束,但它不会

Re: "I'll just sue you. --Steve Jobs 

Re: ?I?ll just sue you.? --Steve Jobs 

ERROR: duplicate key value violates unique constraint "subject_subject_key"
DETAIL: Key (subject)=(Re: ?I?ll just sue you.? --Steve Jobs) already exists.

我怎样才能过去,这仍然使用COPY FROM(这是很方便的)?

+1

你可能已经在数据库中的数据? –

+0

不,我尝试加载时表格是空的。但是我看了一下源数据,是我认为的Unicode值。谢谢回复。我会更新,如果我知道了。 – Gene

回答

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 

这里

CONTEXT: COPY so38, line 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在我的例子)

相关问题