PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Utilizzo del parametro posizionale ($1,..) in psql

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.