PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Argumentos de linha de comando PSQL no script DO


Como os blocos PL são, na verdade, constantes de texto no código, as variáveis ​​internas não são substituídas dentro deles da maneira usual. Felizmente, é possível usar variáveis ​​de sessão para compartilhar dados entre diferentes blocos SQL/PL:
set foo.bar to :v1; -- Name should contains the dot, don't ask me why 
show foo.bar; -- Check that the value was assigned 
do $$
declare
  myvar text := current_setting('foo.bar');
begin
  raise info '%', myvar; -- Output variable value
end $$;

Para garantir que a variável seja atribuída e definir o valor padrão se não for:
\if :{?v1}
  set foo.bar to :v1;
\else
  set foo.bar to 'default';
\endif

Mais detalhes:
https://www.postgresql.org/docs/current/app-psql.html#PSQL-METACOMMAND-IFhttps://www.postgresql.org/docs/current/app-psql.html #APP-PSQL-INTERPOLATION