2017-03-29 57 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在我的例子)

相關問題