Puoi usare variabili psql . Quelli sono interpolati nel codice SQL. Per documentazione:
Tieni presente che (per documentazione ):
Quindi non puoi lavorare con parametri posizionali della forma $1
. Presumo che tu copi questi pezzi di codice dai corpi delle funzioni, e questo è il motivo dei parametri posizionali?
Da PostgreSQL 9.2, anche le funzioni SQL possono fare riferimento ai parametri per nome. Per documentazione:
Le funzioni PL/pgSQL supportano i parametri denominati nel corpo della funzione dalla v8.0.
La mia convenzione di denominazione preferita è quella di anteporre i parametri della funzione con _
per evitare conflitti di denominazione. Ma è una questione di gusto e di stile.
Solo mezza soluzione
Quindi, il tuo esempio potrebbe funzionare in questo modo:
db=> \set _name 'troy'
db=> \set _email '[email protected]'
db=> select * from users where name=:'_name' and email=:'_email';
Devi ancora preparare le stringhe di query ...
Nota le virgolette in :'_name'
. Questo ha lo stesso effetto dell'applicazione di quote_literal()
sulla corda. Dettagli nel manuale.