【问题标题】:PostgreSQL FDW over pgBouncer drops connection to PostgreSQLPostgreSQL FDW over pgBouncer 断开与 PostgreSQL 的连接
【发布时间】: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


【解决方案1】:

我认为您的 min_pool_size 设置可能有问题。尝试使用高于 0 的值。

毕竟,连接池的意义在于拥有持久连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 2017-03-03
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多