Możesz użyć zmiennych psql . Są one interpolowane w kodzie SQL. Zgodnie z dokumentacją:
Pamiętaj, że (w dokumentacji ):
Nie możesz więc pracować z parametrami pozycyjnymi w postaci $1
. Zakładam, że kopiujesz te fragmenty kodu z treści funkcji i to jest powód parametrów pozycyjnych?
Od PostgreSQL 9.2 nawet funkcje SQL mogą odwoływać się do parametrów po nazwie. Zgodnie z dokumentacją:
Funkcje PL/pgSQL obsługują nazwane parametry w treści funkcji od wersji 8.0.
Moja preferowana konwencja nazewnictwa to dodawanie parametrów funkcji przed _
aby uniknąć konfliktów nazw. Ale to kwestia gustu i stylu.
Tylko połowa rozwiązania
Twój przykład może działać tak:
db=> \set _name 'troy'
db=> \set _email '[email protected]'
db=> select * from users where name=:'_name' and email=:'_email';
Nadal musisz przygotować ciągi zapytań...
Zwróć uwagę na cudzysłowy w :'_name'
. Ma to taki sam efekt jak zastosowanie quote_literal()
na sznurku. Szczegóły w instrukcji.