Предоставление динамического имени базы данных в Postgresql - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь предоставить новому пользователю разрешения для текущей базы данных (чье имя я не знаю).

В основном я хочу заархивировать что-то вроде этого:

grant all privileges on database $(SELECT current_database();) to my_new_user;

Любойнамеки, как этого можно достичь?

1 Ответ

0 голосов
/ 05 октября 2018

Вы не можете комбинировать GRANT с запросами напрямую, но вы можете написать небольшой блок для достижения этого.Поскольку GRANT допускает только имена баз данных и не содержит переменных, необходимо создать команду в виде строки и выполнить ее с EXECUTE:

DO $_$
    DECLARE
        the_database TEXT := CURRENT_DATABASE();
    BEGIN
        EXECUTE FORMAT('GRANT ALL PRIVILEGES ON DATABASE %s TO my_new_user', the_database);
    END
$_$;

Addendum : если имя базы данных можетсодержать специальные символы, такие как тире, вы должны поместить имя в двойные кавычки:

DO $_$
    DECLARE
        the_database TEXT := CURRENT_DATABASE();
    BEGIN
        EXECUTE FORMAT('GRANT ALL PRIVILEGES ON DATABASE "%s" TO my_new_user', the_database);
    END
$_$;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...