PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Arguments de ligne de commande PSQL dans le script DO

Parce que les blocs PL sont en fait des constantes de texte dans le code, les variables internes ne sont pas remplacées à l'intérieur de la manière habituelle. Heureusement il est possible d'utiliser des variables de session pour partager des données entre différents blocs 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 $$;

Pour vous assurer que la variable est affectée et définir la valeur par défaut si ce n'est pas le cas :

\if :{?v1}
  set foo.bar to :v1;
\else
  set foo.bar to 'default';
\endif

Plus de détails :
https://www.postgresql.org/docs/current/app-psql.html#PSQL-METACOMMAND-IFhttps://www.postgresql.org/docs/current/app-psql.html #APP-PSQL-INTERPOLATION