PostgreSQL - Slony > FATAL ERROR: двойное значение ключа нарушает уникальное ограничение "sl_nodelock-pkey"

Просто разместите это здесь и можете помочь другим:

Я получил эту ошибку, когда некоторое время назад у нас произошел сбой, и попытался перезапустить службу репликации слонов, поскольку репликация на самом деле НЕ реплицирует данные из MASTER в SLAVE:

FATAL  localListenThread: "select "_MY_DATABASE_copy".cleanupNodelock(); insert into "_MY_DATABASE_copy".sl_nodelock values (    1, 0, "pg_catalog".pg_backend_pid()); " - ERROR:  duplicate key value violates unique constraint "sl_nodelock-pkey"
DEBUG2 slon_abort() from pid=xxxx
DEBUG1 slon: shutdown requested

3 ответа

Решение

Итак, вот как я это исправлю, но это не гарантирует, что это будет работать для всех:

  • Проверьте слон процесс. ~# ps aux | grep slon
  • Затем убейте весь процесс, выполняющий службу репликации slon, которая будет выглядеть примерно так.

    ~# ps aux | grep slon
    root      8321     0.0  0.0   6528  1568 pts/2    S+   10:35   0:00 slon MY_SCHEMA dbname=MY_DATABASE user=postgres host=169.1.1.1 password=password
    

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

~# kill -9 8321

Затем снова запустите сценарий службы репликации Slon.


В нашей среде это вызвано перебоями (запланированными или незапланированными), при которых Postgres выходит из строя до демонов slon. Часто перезапуск слонов не устраняет ошибку. Что решает это:

  1. остановить все слоны, которые ссылаются на отказавший / перезапущенный узел (если вы можете, просто остановите все слоны через slon_kill; намного проще).
  2. войти в sl_nodelock таблицы на главном сервере базы данных и удалите все строки с nl_nodeid, соответствующим отказавшему / перезапущенному узлу.
  3. начать любые остановленные слоны.

Я также получил эту ошибку, и в моем случае применено третье исправление. У нас случайно был "слон" процесс, работающий над будущим рабом. Наше решение состояло в том, чтобы закрыть этот процесс, а затем перезапустить процессы "slon" на ведущем устройстве.

Другие вопросы по тегам