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

PostgreSQL中SET变量跨所有会话可访问的原因排查

PostgreSQL 13.4自定义会话变量跨会话可见的异常原因分析

以下是可能导致该异常的几个原因:

  • 误设置为全局/数据库/角色级参数:
    普通SET my.tenant=2仅作用于当前会话,但如果执行了以下任一命令,变量会对所有新会话生效:

    • ALTER SYSTEM SET my.tenant=2:将变量设为系统级全局参数,所有新会话都会继承,可通过SELECT name, setting, source FROM pg_settings WHERE name = 'my.tenant';查看,source会显示configuration file或override。
    • ALTER DATABASE your_db SET my.tenant=2:将变量设为数据库级参数,所有连接该数据库的新会话都会生效,pg_settings中source为database。
    • ALTER ROLE your_role SET my.tenant=2:将变量设为角色级参数,该角色发起的所有新会话都会继承,pg_settings中source为role。
  • 连接池会话复用未重置状态:
    如果应用使用了PgBouncer、PgPool-II等连接池,连接池会复用已存在的会话而非创建新会话。若某个被复用的会话之前设置过my.tenant=2,新请求复用该会话时就会读取到这个值。需检查连接池配置,确认是否开启了会话重置机制(比如PgBouncer的server_reset_query是否包含重置自定义变量的语句)。

  • postgresql.conf中预先定义了该变量:
    如果在PostgreSQL的主配置文件postgresql.conf中直接添加了my.tenant=2的配置项,所有新启动的会话都会加载这个默认值,可通过查询pg_settings确认source是否为configuration file。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:04:54