维护期间用 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 让队列重新流动。这样,短暂的主库重启或主备切换对应用来说只是短暂的延迟,而不是错误。
适用场景
在短时维护窗口(主备切换、小版本重启、参数重启)期间,以及应用 pgbouncer.ini/userlist 变更时。
注意
PAUSE 只有在所有活动事务结束后才返回;长时间运行的查询会拖住 PAUSE(必要时在 PostgreSQL 中终止该会话)。query_wait_timeout(默认 120 s)到期时,等待中的客户端会收到错误;请在此时间内完成维护。PAUSE 后忘记 RESUME 就是完全中断。部分设置(listen_addr、listen_port 等)不会随 RELOAD 改变,需要重启。