Vous pouvez utiliser variables psql . Ceux-ci sont interpolés en code SQL. Par documentation :
Notez que (par documentation ):
Vous ne pouvez donc pas travailler avec des paramètres positionnels de la forme $1
. Je suppose que vous copiez ces morceaux de code à partir des corps de fonction, et c'est la raison des paramètres positionnels ?
Depuis PostgreSQL 9.2, même les fonctions SQL peuvent référencer les paramètres par leur nom. Par documentation :
Les fonctions PL/pgSQL supportent les paramètres nommés dans le corps de la fonction depuis la v8.0.
Ma convention de nommage préférée est de faire précéder les paramètres de fonction de _
pour éviter les conflits de noms. Mais c'est une question de goût et de style.
Seulement une demi-solution
Ainsi, votre exemple pourrait fonctionner comme ceci :
db=> \set _name 'troy'
db=> \set _email '[email protected]'
db=> select * from users where name=:'_name' and email=:'_email';
Vous devez encore préparer les chaînes de requête...
Notez les guillemets dans :'_name'
. Cela a le même effet que d'appliquer quote_literal()
sur le fil. Détails dans le manuel.