Не можете да използвате директно psql променливи в plpgsql код. Заместването на символа е блокирано вътре в низовете:
postgres=> select :'xx';
?column?
----------
AHOJ
(1 row)
postgres=> select ' :xx ';
?column?
----------
:xx
(1 row)
Но можете да зададете променливи за сесия на сървъра и по-късно да използвате този вид променливи в plpgsql код (от страна на сървъра):
postgres=> set myvars.xx = :'xx';
SET
postgres=> do $$ begin
raise notice '>>%<<', current_setting('myvars.xx');
end $$;
NOTICE: >>AHOJ<<
DO
Можете да използвате същата техника от командния ред, вижте:http://okbob.blogspot.cz/2015/01/how-to-push-parameters-to-do-statement.html
последна бележка - кодът
BEGIN SELECT some; END;
е невалиден в plpgsql. Резултати от всеки SELECT
s трябва да се съхранява в някои променливи. Postgres няма възможност да връща резултат от безплатен SELECT
към клиента - DO
изразът не е еквивалентен на MS SQL процедура.