Nie możesz używać zmiennych psql bezpośrednio w kodzie plpgsql. Podstawianie symboli jest blokowane wewnątrz ciągów:
postgres=> select :'xx';
?column?
----------
AHOJ
(1 row)
postgres=> select ' :xx ';
?column?
----------
:xx
(1 row)
Ale możesz ustawić zmienne sesji serwera, a później używać tego rodzaju zmiennych w kodzie plpgsql (po stronie serwera):
postgres=> set myvars.xx = :'xx';
SET
postgres=> do $$ begin
raise notice '>>%<<', current_setting('myvars.xx');
end $$;
NOTICE: >>AHOJ<<
DO
Możesz użyć tej samej techniki z wiersza poleceń, zobacz:http://okbob.blogspot.cz/2015/01/how-to-push-parameters-to-do-statement.html
ostatnia uwaga - kod
BEGIN SELECT some; END;
jest nieprawidłowy w plpgsql. Wyniki dowolnego SELECT
s powinny być przechowywane w niektórych zmiennych. Postgres nie ma możliwości zwrócenia wyniku bezpłatnego SELECT
do klienta - DO
instrukcja nie jest odpowiednikiem procedury MS SQL.