Não consigo GRANT
aceitar current_database()
como argumento. Todos eles falham com o mesmo erro:
GRANT ALL PRIVILEGES ON DATABASE current_database() to justintestin;
GRANT ALL PRIVILEGES ON DATABASE (current_database()) to justintestin;
GRANT ALL PRIVILEGES ON DATABASE (Select current_database()) to justintestin;
GRANT ALL PRIVILEGES ON DATABASE format('%I', current_database()) to justintestin;
Erro SQL [42601]: ERRO: erro de sintaxe em ou próximo a "("
Atualmente, eu uso EXECUTE
:
Do
$$
Begin
Execute Format('GRANT ALL PRIVILEGES ON DATABASE %I TO %I', current_database(), 'justintestin');
End;
$$;
mas o detalhista sabe que deve haver uma maneira mais simples. Executando na imagem oficial do Docker postgres:16:
PostgreSQL 16.2 (Debian 16.2-1.pgdg120+2) em x86_64-pc-linux-gnu, compilado por gcc (Debian 12.2.0-14) 12.2.0, 64 bits"*).
A interpolação de strings geralmente não é possível para comandos "utilitários". Você deve inserir valores textualmente, mesmo que sejam apenas valores de dados.
Desculpe pelo seu detalhista interno, mas ainda pode ser um consolo saber que o SQL dinâmico
EXECUTE
(como você o tem) já é o caminho a percorrer.Ver: