请不要将此作为使用说明阅读。这是更多的学术兴趣 - 你需要做些什么才能让 pgbouncer 1.7 在/etc/hosts
不重新启动的情况下重新阅读:
第一个演示:
pgbouncer=# show dns_hosts;
hostname | ttl | addrs
----------+-----+-------------
one | 6 | 127.0.0.3:0
(1 row)
pgbouncer=# \! sudo sed -i 's/127.0.0.3/127.0.0.2/' /etc/hosts
pgbouncer=# pause test;
PAUSE
pgbouncer=# kill test;
KILL
pgbouncer=# resume test;
RESUME
pgbouncer=# \! psql -p 6432 -h 127.0.0.1 -U vao -d test -c "\! tail -1 /etc/hosts"
Password for user vao:
127.0.0.2 one
pgbouncer=# show dns_hosts;
hostname | ttl | addrs
----------+-----+-------------
one | 7 | 127.0.0.2:0
(1 row)
pgbouncer=# \! sudo sed -i 's/127.0.0.2/127.0.0.12/' /etc/hosts
pgbouncer=# pause test;
PAUSE
pgbouncer=# kill test;
KILL
pgbouncer=# resume test;
RESUME
pgbouncer=# \! psql -p 6432 -h 127.0.0.1 -U vao -d test -c "\! tail -1 /etc/hosts"
Password for user vao:
127.0.0.12 one
pgbouncer=# show dns_hosts;
hostname | ttl | addrs
----------+-----+--------------
one | 10 | 127.0.0.12:0
(1 row)
现在为什么:
RELOAD
重新读取配置,因此在这里无济于事。dns_max_ttl
控制由dns返回的几个reselves之间的roundroubin,因此不会在这里播放。召回
主机名在连接时解析
我假设为了重新启动连接,我需要删除现有连接(因此不会从池中获取连接) - 两种方法 - 重新启动 pgbouncer 或KILL db
- 将影响隔离到仅一个 dbpgbouncer.ini [databases]
部分。所以我加了
test = host=one port=5432 dbname=t
对它和
127.0.0.3 one
到/etc/hosts
. 其余的在演示中。
我会将这个答案解释为作弊 - 我不会重新启动 pgbouncer,但是需要删除所有与想要的 db 的现有连接。(当然我们不会影响连接的其他数据库客户端,但仍然如此)。所以答案是 - 是的,你可以在不重新启动的情况下执行此操作,但是与该数据库的所有连接都将被删除,因此如果不删除与已更改主机的现有连接,则无法执行此操作。只是PAUSE + RESUME
组合在这里无济于事
主机名在连接时解析