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 '[email protected]'
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.