Как получить разрешение на изменение параметра времени выполнения?

В этом замечательном ответе предлагается 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. установить параметры времени выполнения с правами владельца базы данных?

1 ответ

Решение

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

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

rkdb."current_user"
Другие вопросы по тегам