Du kan bruge psql-variabler . Disse er interpoleret i SQL-kode. Pr. dokumentation:
Bemærk, at (pr. dokumentation ):
Så du kan ikke arbejde med positionelle parametre af formen $1 . Jeg går ud fra, at du kopierer disse stykker kode fra funktionslegemer, og det er årsagen til positionsparametrene?
Siden PostgreSQL 9.2 kan selv SQL-funktioner referere til parametre efter navn. Pr. dokumentation:
PL/pgSQL-funktioner har understøttet navngivne parametre i funktionsteksten siden v8.0.
Min foretrukne navnekonvention er at sætte funktionsparametre foran med _ for at undgå navnekonflikter. Men det er et spørgsmål om smag og stil.
Kun en halv løsning
Så dit eksempel kunne fungere sådan her:
db=> \set _name 'troy'
db=> \set _email 'example@sqldat.com'
db=> select * from users where name=:'_name' and email=:'_email';
Du skal stadig forberede forespørgselsstrenge ...
Bemærk anførselstegnene i :'_name' . Det har samme effekt som at anvende quote_literal() på snoren. Detaljer i manualen.