Назад | Перейти на главную страницу

Цикл сбоя Postgres, вызванный ошибкой одновременно обновленного кортежа

Иногда при запуске Postgres POD в OpenShift отображается следующий код ошибки

   pg_ctl: another server might be running; trying to start server anyway
   waiting for server to start....LOG:  redirecting log output to logging 
   collector process
   HINT:  Future log output will appear in directory "pg_log".
   ..... done
   server started
   => sourcing /usr/share/container-scripts/postgresql/start/set_passwords.sh ...
   ERROR:  tuple concurrently updated

Чтобы исправить проблему:

  1. Найдите имя модуля postgres, который находится в цикле сбоя.
  2. Начать oc debug сеанс со стручком.
  3. Масштабируйте связанное развертывание Postgres до нуля модулей.
  4. Из строки cmd сеанса отладки;

    • Бегать run-postgresql. Это CMD для образа докера. В рамках процесса запуска скрипт создает ряд файлов, которые в противном случае не существовали бы в модуле, а именно: /var/lib/pgsql/openshift-custom-postgresql.conf и /var/lib/pgsql/passwd, что остановит вас от запуска любого из pg_ctl команды. Когда вы запустите команду, вы должны увидеть тот же вывод ошибки, который указан выше.
    • Бегать pg_ctl stop -D /var/lib/pgsql/data/userdata чтобы полностью выключить Postgres. Тебе следует увидеть;

      waiting for server to shut down.... done server stopped

    • Бегать pg_ctl start -D /var/lib/pgsql/data/userdata для запуска Postgres. Вы должны увидеть следующий вывод, и он должен ждать там неопределенно долго (без ошибок);

      server starting sh-4.2$ LOG: redirecting log output to logging collector process HINT: Future log output will appear in directory "pg_log".

    • Нажмите enter пару раз, чтобы вернуться к командной строке.

    • Бегать pg_ctl stop -D /var/lib/pgsql/data/userdataи дождитесь остановки postgres. Это обеспечит чистое завершение работы.

      waiting for server to shut down.... done server stopped

    • Выйдите из сеанса отладки.

    • Масштабируйте развертывание до 1 модуля. Postgres теперь должен запуститься нормально.

Решение найдено после долгой борьбы: https://pathfinder-faq-ocio-pathfinder-prod.pathfinder.gov.bc.ca/DB/PostgresqlCrashLoopTupleError.html Кредиты принадлежат автору: Уэйд Барнс