psql
parser kan inte se vad som finns inuti strängar. Det här kan vara vad du vill ha:
delete from t
where :para = 1
Gör det utanför ett anonymt block. Om du verkligen behöver PL/pgSQL
använd en parametriserad funktion:
create or replace function f(_para integer)
returns void as $$
begin
if _para = 1 then
--statements
end if;
end; $$ language plpgsql;
Och din skriptfil kommer att ha:
select f(:para);
Om du inte vill permanent lägga till en funktion till db:n gör du allt i skriptet:
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);
Ge funktionen ett unikt namn så att du inte riskerar att tappa något annat.