PostgreSQL - Slony> FATAL ERROR: двойное значение ключа нарушает уникальное ограничение «sl_nodelock-pkey» - PullRequest
3 голосов
/ 15 сентября 2010

Просто опубликуйте это здесь и, возможно, помогите другим:

Я получил эту ошибку, когда некоторое время назад у нас был сбой, и попытался перезапустить службу репликации слонов, поскольку репликация на самом деле НЕ реплицирует данные изМАСТЕР РАБОВАТЬ:

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 ]

2 голосов
/ 14 февраля 2012

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

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

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

1 голос
/ 15 сентября 2010

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

  • Проверьте процесс slon.~# 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.


...