【发布时间】:2021-03-13 14:32:55
【问题描述】:
我们有一个 PostgreSQL 设置,我们通过 pgBouncer 将 FDW(转发数据包装器)连接定向到其他数据库。一旦我们对 FDW 模式执行查询,从 FDW 到 pgBouncer 到另一个 PostgreSQL 服务器的连接就会正确打开,但是一旦我们关闭到 FDW 服务器的连接,从 pgBouncer 到 PostgreSQL 的连接不会返回到保镖池,而是从 pgBouncer 池中删除并且在 PostgreSQL 端不可见(断开连接)。
如果我们在没有 FDW 的情况下做同样的事情,但是我们在同一个 PostgreSQL 服务器上使用 pgBouncer 查询数据库并断开连接,我们看到连接返回到 pgBouncer 池并且它在 PostgreSQL 服务器上仍然可用(默认丢弃一次达到 10 分钟 server_idle_timeout)。
当 FDW 使用 pgBouncer 时,为什么会断开与 PostgreSQL 的连接,这是期望的行为吗?如果不是,是否有任何设置需要应用于 pgBouncer、FDW 或 PostgreSQL,或者这是任何一方的错误?
- pgBouncer 1.15.0
- PostgreSQL v12
pgBouncer 配置
;;
;;; PgBouncer configuration file
;;;
[databases]
* = host=192.168.210.51 port=5432
[users]
[pgbouncer]
;;;
;;; Administrative settings
;;;
logfile = /var/log/pgbouncer/pgbouncer.log
pidfile = /var/run/pgbouncer/pgbouncer.pid
;;;
;;; Where to wait for clients
;;;
;; IP address or * which means all IPs
listen_addr = *
listen_port = 6432
;;;
;;; Authentication settings
;;;
;; any, trust, plain, md5, cert, hba, pam
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
;;;
;;; Users allowed into database 'pgbouncer'
;;;
;; comma-separated list of users who are allowed to change settings
admin_users = postgres
;; comma-separated list of users who are just allowed to use SHOW command
stats_users = stats, postgres
;;;
;;; Pooler personality questions
;;;
;; When server connection is released back to pool:
;; session - after client disconnects (default)
;; transaction - after transaction finishes
;; statement - after statement finishes
pool_mode = session
;;;
;;; Connection limits
;;;
;; Total number of clients that can connect
max_client_conn = 1000
;; Default pool size. 20 is good number when transaction pooling
;; is in use, in session pooling it needs to be the number of
;; max clients you want to handle at any moment
default_pool_size = 50
;; Minimum number of server connections to keep in pool.
min_pool_size = 0
; how many additional connection to allow in case of trouble
;reserve_pool_size = 0
FDW 配置
CREATE SERVER IF NOT EXISTS \"DatabaseName\"
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (dbname 'DatabaseName', host 'DatabaseHost', port 'port',
fetch_size '50000', use_remote_estimate 'true',
application_name 'my_reporting_fdw');
CREATE USER MAPPING IF NOT EXISTS
FOR CURRENT_USER SERVER \"DatabaseName\"
options (user 'DatabaseUsername', password 'DatabasePassword');
IMPORT FOREIGN SCHEMA \"public\"
FROM SERVER \"DatabaseName\" INTO \"DatabaseName\";
【问题讨论】:
-
什么是 pgBouncer 配置?用户和数据库是什么?
-
@LaurenzAlbe 我已经添加了 pgBouncer 和 FDW 配置并使用 postgre 用户进行所有操作。谢谢
标签: postgresql postgresql-12 pgbouncer postgres-fdw