2013-03-26 4 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

+1

'DISTINCT ON (geo_id2)' вероятно, будет лучше, чем просто 'DISTINCT'. –

+0

'DISTINCT ON (geoid2)' works :) – Nyxynyx

ответ

1

Правильный ответ DISTINCT ON (geo_id2) который будет выбрать только одну строку за geo_id2 (больше в manual), оно должно сопровождаться ORDER BY оговоркой, что будет указать, какие строки будут выбраны.