在这个精彩的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)
所以我的猜测是,我的数据库所有者没有访问此参数的权限。我怎么能:
甚至更好
答案 0 :(得分:1)
current_user
是一个SQL标准函数,因此您对该名称的使用会混淆解析器。
使用不同的名称或用双引号括起来,如下所示:
rkdb."current_user"