Du kan använda psql-variabler . De är interpolerade i SQL-kod. Per dokumentation:
Observera att (per dokumentation ):
Så du kan inte arbeta med positionsparametrar av formen $1 . Jag antar att du kopierar dessa kodbitar från funktionskroppar, och det är anledningen till positionsparametrarna?
Sedan PostgreSQL 9.2 kan även SQL-funktioner referera till parametrar efter namn. Per dokumentation:
PL/pgSQL-funktioner har stött namngivna parametrar i funktionskroppen sedan v8.0.
Min föredragna namnkonvention är att lägga till funktionsparametrar med _ för att undvika namnkonflikter. Men det är en fråga om smak och stil.
Bara en halv lösning
Så ditt exempel kan fungera så här:
db=> \set _name 'troy'
db=> \set _email 'example@sqldat.com'
db=> select * from users where name=:'_name' and email=:'_email';
Du måste fortfarande förbereda frågesträngar ...
Observera citattecken i :'_name' . Det har samma effekt som att använda quote_literal() på snöret. Detaljer i manualen.