You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bitnami PostgreSQL HA通过PgPool II创库时出现会话上下文获取失败错误

问题描述

在Kubernetes集群中部署Bitnami的PostgreSQL HA Helm Chart并完成配置后,使用PgPool II的连接字符串从.NET应用创建数据库时,出现PID XXX Unable to get session context错误。

应用逻辑为先创建不存在的数据库,再执行数据迁移,相关测试结果:

  • 手动创建数据库后,应用可正常完成迁移,证明连接字符串无误;
  • 跳过PgPool直接连接PostgreSQL服务器时,应用也能正常创建并迁移数据库;
  • 所有操作均使用超级用户。

pg_hba.conf 配置

host     all            repmgr    0.0.0.0/0    trust
host     repmgr         repmgr    0.0.0.0/0    trust
host     repmgr         repmgr    ::/0    trust
host     replication      repmgr    0.0.0.0/0    trust
host     replication      repmgr    ::/0    trust
#hostssl     all             all             0.0.0.0/0               cert
#hostssl     all             all             ::/0                    cert
host     all              all       0.0.0.0/0    trust
host     all              all       ::/0         trust
local    all              all                    trust

pool_hba.conf 配置

local    all             all                            trust
host     all             repmgr       all         trust
host     all             aio       all         scram-sha-256
host     all             wide               all         trust
host     all             pop_user           all         trust
host     all             all                all         scram-sha-256

请问通过PgPool连接时,是否需要修改代码以获取会话上下文?


解决方案分析

不需要修改代码,这个错误是PgPool II的配置问题导致的,核心原因是创建数据库的DDL操作必须在主节点执行,而PgPool默认的负载均衡策略可能将请求分发到了从节点,或是缺少路由规则让PgPool识别这类需主节点处理的操作。

具体解决步骤:

  1. 确认PgPool能正确识别主节点:检查pool.conf中的主节点检测配置(如sr_check_user、sr_check_password)是否正确配置,确保PgPool可自动识别当前主库。
  2. 添加SQL路由规则:在pool.conf中配置规则,将创建数据库的语句强制路由到主节点:
    # 匹配CREATE DATABASE语句,路由至主节点
    backend_clustering_rule_list = 'CREATE DATABASE:*:primary'
    
  3. 检查超级用户的PgPool认证规则:确保你使用的超级用户在pool_hba.conf中拥有正确的访问权限,当前配置最后一行是host all all all scram-sha-256,如果超级用户是postgres,可单独添加信任规则简化认证:
    host     all             postgres       all         trust
    
  4. 验证会话上下文相关配置:确认pool.conf中enable_pool_hba = on,且store_session等会话上下文存储配置处于启用状态(默认已开启)。

跳过PgPool直接连主库能成功的测试结果,也验证了问题出在PgPool的路由配置上,调整上述配置后即可解决错误,无需修改应用代码。

内容的提问来源于stack exchange,提问作者Dardan Lubishtani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 13:29:27