2

https://pgbouncer.github.io/usage.htmlによると、実行KILL db;すると、指定されたデータベース上のすべてのクライアントとサーバーの接続がすぐにドロップされます。 を使用して、テスト環境でpostgresへのすべての接続を停止しようとしていました

=# kill postgres;

そして、すべてのクライアントとサーバーの接続が実際に閉じられましたが、postgres に接続できなくなりました。

$ psql -h localhost -p 6543 postgres
psql: ERROR: pgbouncer cannot connect to server

postgresql.log には、次のメッセージがあります

[2016-04-27 16:21:38 u=postgres d=postgres h=[local] p=12458 l=1] LOG: could not send data to client: Broken pipe
[2016-04-27 16:21:38 u=postgres d=postgres h=[local] p=12458 l=2] FATAL: connection to client lost

pgBouncer realod は状況を変えず、再起動のみが役立ちます。

=# show databases;
name     │ host │ port │ database │ force_user │ pool_size │ reserve_pool │ pool_mode │ max_connections │ current_connections
─────────┼──────┼──────┼──────────┼────────────┼───────────┼──────────────┼───────────┼─────────────────┼─────────────────────

postgres │ NULL │ 5454 │ postgres │ NULL       │         5 │ 100          │ NULL      │ 0               │ 0


=# show version;
NOTICE: pgbouncer version 1.7.2
  1. 誰が何が起こったのか説明できますか?
  2. 再起動せずに pgbouncer を介して postgres-connection を修復する方法はありますか?
  3. データベース接続のロックが kill コマンドの予期される動作である場合、新しい接続をブロックせずにすべての接続を閉じるにはどうすればよいですか?

ありがとう、ミハイル

4

1 に答える 1