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