psql変数 を使用できます。 。それらはSQLコードで補間されます。 ドキュメントごと:
(ドキュメントごと に注意してください。 ):
したがって、$1
の形式の位置パラメータを操作することはできません。 。これらのコードを関数本体からコピーすると仮定します。これが位置パラメーターの理由です。
PostgreSQL9.2以降、SQL関数でも名前でパラメーターを参照できます。 ドキュメントごと:
PL / pgSQL関数は、v8.0以降、関数本体で名前付きパラメータをサポートしています。
私の好みの命名規則は、関数パラメーターの前に_
を付けることです。 名前の競合を避けるため。しかし、それは好みとスタイルの問題です。
ソリューションの半分のみ
したがって、あなたの例は次のように機能する可能性があります:
db=> \set _name 'troy'
db=> \set _email '[email protected]'
db=> select * from users where name=:'_name' and email=:'_email';
クエリ文字列を準備する必要があります...:'_name'
。これは、quote_literal()
を適用するのと同じ効果があります 文字列に。 詳細はマニュアルに記載されています。