PGSQL JDBC中setClientInfo信息的存储位置及查询访问方法咨询
在PostgreSQL触发器中访问JDBC setClientInfo设置的信息
可以直接在触发器、数据库函数或其他数据库端查询中访问setClientInfo设置的信息,具体分两种场景:
标准属性(如application_name)
对于JDBC规范定义的标准属性(例如application_name),驱动会直接将其映射到PostgreSQL对应的会话参数。你可以通过current_setting()函数直接读取:
SELECT current_setting('application_name');
在触发器逻辑中调用该函数即可获取对应值。
自定义属性
对于你自行定义的非标准client info属性,JDBC驱动会自动将其存储为前缀为jdbc.client.info.的会话参数。比如你在应用中执行:
connection.setClientInfo("user_id", "1001");
对应的数据库会话参数就是jdbc.client.info.user_id,在触发器或查询中可以这样获取:
SELECT current_setting('jdbc.client.info.user_id');
如果担心目标属性不存在导致报错,可以添加第二个参数返回默认值(不存在时返回NULL):
SELECT current_setting('jdbc.client.info.user_id', true);
验证方法
在应用设置完client info后,可直接在数据库端执行以下查询,查看所有相关的会话参数:
SELECT name, setting FROM pg_settings WHERE name LIKE 'jdbc.client.info.%' OR name = 'application_name';
内容的提问来源于stack exchange,提问作者Brandon Childers
相关产品推荐
相关产品推荐

