Můžete použít proměnné psql . Ty jsou interpolovány v kódu SQL. Podle dokumentace:
Upozorňujeme, že (podle dokumentace ):
Nemůžete tedy pracovat s pozičními parametry ve tvaru $1
. Předpokládám, že kopírujete tyto části kódu z těl funkcí, a to je důvod pro poziční parametry?
Od PostgreSQL 9.2 mohou i funkce SQL odkazovat na parametry podle názvu. Podle dokumentace:
Funkce PL/pgSQL podporují pojmenované parametry v těle funkce od verze 8.0.
Moje preferovaná konvence pojmenování je přidat před parametry funkce _
aby nedocházelo ke konfliktům v pojmenování. Ale to je věc vkusu a stylu.
Pouze poloviční řešení
Váš příklad by tedy mohl fungovat takto:
db=> \set _name 'troy'
db=> \set _email '[email protected]'
db=> select * from users where name=:'_name' and email=:'_email';
Stále musíte připravit řetězce dotazů ...
Všimněte si uvozovek v :'_name'
. To má stejný účinek jako použití quote_literal()
na provázku. Podrobnosti v příručce.