2015-03-26 2 views
0

я в настоящее время работает на моем PSQL свою первую базу Psql, созданную ниже:ОШИБКА: Не удалось создать уникальный индекс Psql

DROP TABLE IF EXISTS test_table_a; 
DROP TABLE IF EXISTS test_table_b; 

CREATE TABLE test_table_a (
    test_name_a varchar (150) NOT NULL, 
    test_num_a integer NOT NULL 
); 
ALTER TABLE test_table_a OWNER TO me; 

CREATE TABLE test_table_b (
    test_name_b varchar (150) NOT NULL, 
    test_num_b integer NOT NULL 
); 
ALTER TABLE test_table_b OWNER TO me; 

CREATE TABLE test_table_c (
    test_name_a varchar (150) NOT NULL, 
    test_num_a integer NOT NULL, 
    test_num_b integer NOT NULL, 
    test_name_b varchar(150) NOT NULL, 

); 
ALTER TABLE test_table_c OWNER TO me; 

Затем я загрузить его с данными ...:

echo COPY test_table_a FROM location_x 
psql -c "COPY (
    SELECT DISTINCT 
     test_num_a, 
     test_name_a, 
    FROM location_x 
) TO STDOUT;" location_x | \ 
    psql -c "COPY test_table_a FROM STDIN;" me 

echo COPY test_table_b FROM location_x 
psql -c "COPY (
    SELECT DISTINCT 
     test_num_b, 
     test_name_b, 
    FROM location_x 
) TO STDOUT;" location_x | \ 
    psql -c "COPY test_table_b FROM STDIN;" me 


echo COPY test_table_c FROM location_x 
psql -c "COPY (
    SELECT DISTINCT 
     test_num_a, 
     test_name_a, 
     test_num_b, 
     test_name_b 
    FROM location_x 
) TO STDOUT;" location_x | \ 
    psql -c "COPY test_table_c FROM STDIN;" me 

А затем я пытаюсь добавить ключи, которые, когда я генерировать следующие ошибки:

ERROR: could not create unique index "pk_test_num_a" DETAIL: KEY (test_num_a) = (128) is duplicated. ERROR: could not create unique index "pk_test_num_b" DETAIL: KEY (test_num_b) = (110) is duplicated.

Когда я бегу:

ALTER TABLE divDemographic 
    ADD CONSTRAINT pk_test_num_b PRIMARY KEY (test_num_b); 

ALTER TABLE schDemographic 
    ADD CONSTRAINT pk_test_num_a PRIMARY KEY (test_num_a); 

ALTER TABLE test_table_c 
    ADD CONSTRAINT fk_test_num_a FOREIGN KEY (test_num_a) REFERENCES test_table_a(test_num_a), 
    ADD CONSTRAINT fk_test_num_b FOREIGN KEY (test_num_b) REFERENCES test_table_b(test_num_b); 

Я думал, что с помощью «Дубликат» спецификатор в некоторых заявлениях бы предотвратить это, любые мысли о том, как исправить эту ошибку? благодаря

ответ

2

SELECT DISTINCT обнаруживает повторяющиеся строки путем сравнения всех выбранных столбцов: ясно у вас есть строки с test_num_a = 128 и другой test_name_a, которые различны.

Либо содержимое вашей таблицы источника location_x неисправен или вы не можете использовать test_num_a в качестве первичного ключа.

+0

Это имеет смысл ... Я думаю, что test_num_a может иметь несколько test_num_b для каждого значения test_num_a ... плохо попробуйте это и вернитесь к вам. – sudobangbang

Смежные вопросы