No puede usar variables psql dentro del código plpgsql directamente. La sustitución de símbolos está bloqueada dentro de las cadenas:
postgres=> select :'xx';
?column?
----------
AHOJ
(1 row)
postgres=> select ' :xx ';
?column?
----------
:xx
(1 row)
Pero puede configurar las variables de una sesión del servidor y luego usar este tipo de variables en el código plpgsql (en el lado del servidor):
postgres=> set myvars.xx = :'xx';
SET
postgres=> do $$ begin
raise notice '>>%<<', current_setting('myvars.xx');
end $$;
NOTICE: >>AHOJ<<
DO
Puede usar la misma técnica desde la línea de comando, consulte:http://okbob.blogspot.cz/2015/01/how-to-push-parameters-to-do-statement.html
última nota - el código
BEGIN SELECT some; END;
no es válido en plpgsql. Resultados de cualquier SELECT
s debe almacenarse en algunas variables. Postgres no tiene la posibilidad de devolver el resultado de SELECT
gratis al cliente - DO
declaración no es equivalente al procedimiento de MS SQL.