PostgreSQL 10 логическая репликация: двойные записи или конфликт первичного ключа - PullRequest
0 голосов
/ 07 июня 2018

Я построил master -> slave setup с PostgreSQL 10 для синхронизации данных из некоторых конкретных таблиц с ведомым компьютером, который является публичной системой.Сейчас в течение всего времени я сталкиваюсь со странным поведением: некоторые таблицы вообще не синхронизируются.

Просматривая журнал PostgreSQL, я сталкиваюсь с такими сообщениями об ошибках:

2018-06-07 15:28:30.163 CEST [4134] LOG:  worker process: logical replication worker for subscription 18249 sync 17956 (PID 6706) exited with exit code 1

2018-06-07 15:28:30.183 CEST [6707] ERROR:  duplicate key value violates unique constraint "producttext_pk"

2018-06-07 15:28:30.183 CEST [6707] DETAIL:  Key (id)=(100) already exists.

2018-06-07 15:28:30.183 CEST [6707] CONTEXT:  COPY producttext, line 1

Для дальнейшего анализа я удалил первичный ключ в этой таблице на ведомом компьютере, и в этом случае ошибка больше не возникает, НО теперь я получаю повторяющиеся записи в таблице.

Единственный способчтобы предотвратить повторяющиеся записи, необходимо иметь первичный ключ на месте, но тогда синхронизация не будет работать, пока она продолжает циклически обрабатывать ровно четыре таблицы, не переходя к остальным.

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

Могу ли я что-то пропустить на этом этапе?Большое спасибо.

1 Ответ

0 голосов
/ 07 июня 2018

Вы пропустили, что вы не можете вставить строки в таблицу в режиме ожидания, которые могут конфликтовать с потоками, которые реплицируются с основного.

Если вам нужно вставить как на основной, так и в резервный, вам нужно сделатьубедитесь, что первичные ключи не конфликтуют, например, вставляя только четные идентификаторы в один и нечетные идентификаторы в другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...