2014-12-27 2 views
1

Я пытаюсь свалить db на другой. В таблицах есть несколько повторяющихся уникальных значений. Когда pg_dump попытается добавить этот элемент в db, он выдает ошибку и завершает работу. Ошибка похожа;skip нарушает уникальное ограничение при сбросе db

ERROR: duplicate key value violates unique constraint "test_table_pkey" 
DETAIL: Key (pktable)=(col11) already exists. 
CONTEXT: COPY test_table, line 1: "col11 col12" 

Мой стол;

Column |   Type   | Modifiers 
-------------+-----------------------+----------- 
pktable  | text     | not null 
source  | text     | not null 
Indexes: 
    "test_table_pkey" PRIMARY KEY, btree (pktable) 

Моя команда;

pg_dump -U postgres -v --data-only <db_name> | psql -U postgres -h <remote_host> -d <db_name> 

Я хочу, чтобы pg_dump пропускал дублирующее уникальное значение и продолжал операцию сброса. Как я могу это сделать?

+0

Что делать, если ключи совпадают, но остальные строки различны? –

+0

В моем случае, если ключи одинаковы, все строки должны быть одинаковыми. Однако это правило, написанное Лайошем, может вызвать другие проблемы в моей ситуации. – umut

+0

Какие проблемы вызывает правило? –

ответ

2

Я думаю, что это правило может помочь вам:

CREATE RULE "my_table_on_duplicate_ignore" AS ON INSERT TO "my_table" 
    WHERE EXISTS(SELECT 1 FROM my_table 
       WHERE (pk_col_1, pk_col_2)=(NEW.pk_col_1, NEW.pk_col_2)) 
    DO INSTEAD NOTHING; 

В основном INSTEAD NOTHING срабатывает, если вновь вставленной строки уже в таблице.

(Исходя из этого: https://stackoverflow.com/a/6176044/1665673)

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

  • Нет связанных вопросов^_^