Как получить разрешение на изменение параметра времени выполнения? - PullRequest
0 голосов
/ 09 июня 2018

В этом замечательном ответе предлагается 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 Ответ

0 голосов
/ 11 июня 2018

current_user - стандартная функция SQL, поэтому использование этого имени сбивает с толку синтаксический анализатор.

Либо используйте другое имя, либо заключите его в двойные кавычки, например:

rkdb."current_user"
...