В этом замечательном ответе предлагается 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)
Так что я думаю, у моего владельца базы данных нет прав доступа к этому параметру.Как я могу:
- установить необходимые разрешения?
или даже лучше
установить параметры времени выполнения с правами владельца базы данных?