如何获得更改运行-时间参数的权限?

How to get permission to change run-time parameter?

在这个精彩的 answer 中,提出了 GUC 模式使用 运行 时间参数来检测当前用户内部触发器(作为一种解决方案)。它似乎也适合我。但问题是:当我在 postgresql.conf 中声明变量时,它可以在触发器内部使用,我可以从查询中访问它,但不能更改它:

# SET rkdb.current_user = 'xyzaaa';
ERROR:  syntax error at or near "current_user"
LINE 1: SET rkdb.current_user = 'xyzaaa';

错误信息具有误导性,所以我暂时没有深入研究,但现在看来这个用户(数据库所有者)没有权限更改全局配置中设置的参数。

我可以设置任何其他参数:

# SET jumala.kama = 24;
SET

并读回:

# SHOW jumala.kama;
 jumala.kama 
-------------
 24
(1 row)

我无法SHOW全局设置参数:

# SHOW rkdb.current_user;
ERROR:  syntax error at or near "current_user"
LINE 1: SHOW rkdb.current_user;
                  ^

但我可以使用 current_setting() 函数到达它:

# select current_setting('rkdb.current_user');
 current_setting 
-----------------
 www
(1 row)

所以我的猜测是,我的数据库所有者没有访问此参数的权限。我怎么能:

  1. 设置需要的权限?

甚至更好

  1. 设置 运行-时间参数与数据库所有者权限?

current_user 是一个 SQL 标准函数,因此您使用该名称会使解析器感到困惑。

要么使用不同的名称,要么像这样用双引号括起来:

rkdb."current_user"