postgresql postgres -无法识别的配置参数

bq9c1y66  于 5个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(62)

我在触发器中使用以下查询来存储用户ID以供进一步用途:

SELECT set_config('session.my_username', 'john', false);

字符串
后来,在其他触发器中,我这样使用它:

SELECT current_setting('session.my_username');


当用户使用应用程序时,设置参数(执行第一个查询)时,它就像一个魅力。
关键是,如果开发人员/支持者试图使用某些数据库工具修改调用第二个触发器的数据,第一个触发器不会被执行。在这种情况下,开发人员/支持者会收到unrecognized configuration parameter错误消息。
我的问题是,如何避免这种情况?有没有办法知道配置参数没有设置之前,我调用SELECT current_setting()

hsgswve4

hsgswve41#

对于set_config(),第三个参数中的false表示 * 新值应用于当前会话 *,第三个参数中的true表示 * 新值应用于当前事务 *,如下所示:

SELECT set_config('my.num', '2', false);
SELECT current_setting('my.num'); -- 2
BEGIN;
SELECT set_config('my.num', '4', true);
SELECT current_setting('my.num'); -- 4
COMMIT;
SELECT current_setting('my.num'); -- 2

字符串
此外,当您在会话中使用从未设置过(甚至一次)的custom option时会出现错误,而当您在会话中使用已设置(至少一次)的自定义选项时不会出现错误,如下所示:

SELECT current_setting('my.num'); -- Error
BEGIN;
SELECT set_config('my.num', '4', true);
SELECT current_setting('my.num'); -- 4
COMMIT;
SELECT current_setting('my.num'); -- Nothing is returned without error

相关问题