No Postgres 15, como podemos definir constantes que pertencem à lógica de negócios em vez de definições de configuração do banco de dados? Eu gostaria de defini-los dentro de scripts SQL em vez de passar pelo psql -v MY_CONSTANT=123
comando e não me importo se eles persistirem apenas para a sessão.
Nas versões anteriores, eu me safava discretamente com a seguinte sintaxe:
SET MY_CONSTANT TO 123; -- declared
CALL my_func(:MY_CONSTANT); -- used
Que da documentação parece ser destinado a modificar as configurações conhecidas do banco de dados e explica por que estou encontrando problemas como este:
my_script.sql:2: ERROR: unrecognized configuration parameter "my_constant"
Se você deseja uma maneira "somente SQL", pode usar instruções preparadas em SQL. Tal;
Referências:
Tentar:
Observe que esta sintaxe só funciona se você executar seus scripts em
psql
. Caso contrário, tente esta solução alternativa:A tabela temporária existe apenas para a sessão atual, ela desaparecerá após o logout.
Existem três contextos distintos que podem pertencer à sua pergunta:
DO
comandoA resposta para cada escopo é diferente. Parece que você está misturando pelo menos dois deles.
SET
é um comando SQL. Você pode usá-lo para definir "opções personalizadas". Deve conter um ponto - ao contrário das configurações do Postgres (GUCs). O manual :E você o recupera com
SHOW
oucurrent_setting()
:Só opera no tipo
text
embora. Você pode precisar lançar.Essa é a sintaxe da interpolação SQL no psql, que funciona para variáveis do psql. Ver:
Relacionado: