Le psql
l'analyseur ne peut pas voir ce qu'il y a à l'intérieur des chaînes. C'est peut-être ce que vous voulez :
delete from t
where :para = 1
Faites-le en dehors d'un bloc anonyme. Si vous avez vraiment besoin de PL/pgSQL
utiliser une fonction paramétrée :
create or replace function f(_para integer)
returns void as $$
begin
if _para = 1 then
--statements
end if;
end; $$ language plpgsql;
Et votre fichier de script aura :
select f(:para);
Si vous ne souhaitez pas ajouter de façon permanente une fonction à la base de données, faites tout dans le script :
drop function if exists f_iu7YttW(integer);
create or replace function f_iu7YttW(_para integer)
returns void as $$
begin
if _para = 1 then
--statements
end if;
end; $$ language plpgsql;
select f_iu7YttW(:para);
drop function f_iu7YttW(integer);
Donnez à la fonction un nom unique afin de ne pas courir le risque de laisser tomber autre chose.