Вы не можете комбинировать 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
$_$;