Удерживать подключения во время обслуживания через PgBouncer (PAUSE/RESUME) и перечитать конфигурацию (RELOAD)
PostgreSQLPgBouncerКоманда
psql -h 127.0.0.1 -p 6432 -U pgbouncer -d pgbouncer -X
RELOAD; -- apply pgbouncer.ini and auth_file changes without dropping connections
PAUSE <db>; -- closes server connections once running queries/transactions finish; new requests are queued
-- ... maintenance: switchover, PostgreSQL restart, etc. ...
RESUME <db>;
-- If the host in [databases] was changed (after RELOAD), gradually refresh server connections:
RECONNECT <db>;Что делает
PAUSE освобождает подключения на стороне PostgreSQL, не разрывая клиентские подключения, и ставит новые запросы в очередь; RESUME снова пропускает очередь. Так кратковременный перезапуск primary или switchover выглядит для приложения как небольшая задержка, а не ошибки.
Когда использовать
Во время коротких окон обслуживания (switchover, перезапуск для минорной версии, перезапуск из-за параметров) и при применении изменений pgbouncer.ini/userlist.
Внимание
PAUSE возвращает управление только после завершения всех активных транзакций; долгий запрос задерживает PAUSE (при необходимости завершите эту сессию в PostgreSQL). Ожидающие клиенты получают ошибку по истечении query_wait_timeout (по умолчанию 120 s); завершите обслуживание за это время. Забытый RESUME после PAUSE — это полный простой. Некоторые настройки (listen_addr, listen_port и т. д.) не меняются через RELOAD и требуют перезапуска.