PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PSQL-Befehlszeilenargumente im DO-Skript

Da die PL-Blöcke eigentlich Textkonstanten im Code sind, werden die internen Variablen in ihnen nicht auf die übliche Weise ersetzt. Glücklicherweise ist es möglich, Sitzungsvariablen zum Teilen von Daten zwischen verschiedenen SQL/PL-Blöcken zu verwenden:

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 $$;

Um sicherzustellen, dass die Variable zugewiesen wird, und setzen Sie den Standardwert, wenn dies nicht der Fall ist:

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

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