如何获得更改运行-时间参数的权限?
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)
所以我的猜测是,我的数据库所有者没有访问此参数的权限。我怎么能:
- 设置需要的权限?
甚至更好
- 设置 运行-时间参数与数据库所有者权限?
current_user
是一个 SQL 标准函数,因此您使用该名称会使解析器感到困惑。
要么使用不同的名称,要么像这样用双引号括起来:
rkdb."current_user"
在这个精彩的 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)
所以我的猜测是,我的数据库所有者没有访问此参数的权限。我怎么能:
- 设置需要的权限?
甚至更好
- 设置 运行-时间参数与数据库所有者权限?
current_user
是一个 SQL 标准函数,因此您使用该名称会使解析器感到困惑。
要么使用不同的名称,要么像这样用双引号括起来:
rkdb."current_user"