Как получить разрешение на изменение параметра времени выполнения?
В этом замечательном ответе предлагается 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 ответ
current_user
является стандартной функцией SQL, поэтому использование вами этого имени сбивает с толку парсер.
Либо используйте другое имя, либо заключите его в двойные кавычки, например:
rkdb."current_user"