2013-03-26 23 views
0

我正在關注PostgreSQL書籍,並且必須將CSV文件導入表census.lu_tracts在PostgreSQL導入過程中出現重複鍵

問題:在進行INSERT查詢,如下圖所示,我得到的錯誤:

ERROR: duplicate key value violates unique constraint "pk_lu_tracts" 
DETAIL: Key (tract_id)=(25001010800) already exists. 

怎麼的關鍵變成複製? SELECT * from lu_tracs顯示0行。

CREATE SCHEMA census; 
set search_path=census; 
CREATE TABLE lu_tracts(tract_id varchar(11), tract_long_id varchar(25) 
, tract_name varchar(150) 
, CONSTRAINT pk_lu_tracts PRIMARY KEY (tract_id)); 

INSERT INTO lu_tracts(tract_id, tract_long_id, tract_name) 
SELECT geo_id2, geo_id, geo_display 
FROM staging.factfinder_import 
WHERE geo_id2 ~ '^[0-9]+'; 
+0

事務被中止,因此沒有行被插入 - 以及爲什麼您在該表中看到0行。您最有可能在'staging.factfiner_import'表中有一個重複的地方,其中'geo_id2' ='25001010800'。你可以嘗試使用'SELECT DISTINCT'來修復它。否則,你需要以另一種方式過濾它。 – jcern 2013-03-26 18:22:24

+1

'DISTINCT ON(geo_id2)'可能會比'DISTINCT'更好。 – 2013-03-26 18:23:50

+0

'DISTINCT ON(geoid2)'作品:) – Nyxynyx 2013-03-26 21:35:15

回答

1

正確的答案是DISTINCT ON (geo_id2)這將選擇每geo_id2(多在manual)只有一行,它應該由一個ORDER BY子句將指定什麼行會作爲選陪同。