Тъй като PL блоковете всъщност са текстови константи в кода, вътрешните променливи не се заменят вътре в тях по обичайния начин. За щастие е възможно да се използват променливи на сесията за споделяне на данни между различни 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 $$;
За да сте сигурни, че променливата е присвоена и задайте стойността по подразбиране, ако не е:
\if :{?v1}
set foo.bar to :v1;
\else
set foo.bar to 'default';
\endif
Повече подробности:
https://www.postgresql.org/docs/current/app-psql.html#PSQL-METACOMMAND-IFhttps://www.postgresql.org/docs/current/app-psql.html #APP-PSQL-INTERPOLATION