PostgreSQLでパラメータ付きビューを作成することはできますか?PostgreSQLのパラメータ付きSQLビュー、実行時にSQLエラーを防ぐ最も良い方法は?
私たちのバックエンドサービスで内部サーバーエラーの原因となる未確認のSQL構文がある可能性があります。そのため、すべてのクエリをビューに変換する必要がありますか?このような
何か:
query := ` --
func Bla_ByType
SELECT id
, data
-
>>
'name'
FROM bla
WHERE data->>'type' = ` + escapeAndQuote(param1)
構文それは単なる文字列なので、エラーとして検出されない上には、正しいものは次のようになります。
query := ` -- func Bla_ByType
SELECT id
, data->>'name'
FROM bla
WHERE data->>'type' = ` + escapeAndQuote(param1)
単純なクエリ上記の例で、他の次のようなものです:
WITH t AS (
SELECT ...
FROM
WHERE param1
) SELECT ...
FROM ...
LEFT JOIN t
WHERE param2`
読書以外の方法はありますか?プログラマは、セッション変数を設定するのを忘れた場合ERROR: unrecognized configuration parameter "bla_bytype._type"
:セッションは:
CREATE OR REPLACE VIEW v_bla_bytype AS
SELECT id
, data->>'name'
FROM bla
WHERE data->>'type' = CAST(current_setting('bla_bytype._type') as TEXT)
SET bla_bytype._type = 'test';
SELECT * FROM v_bla_bytype;
セッション変数の問題はまだエラー、のようなものを持っているでしょう。
またはストアドプロシージャ使用してストアドプロシージャに問題
CREATE OR REPLACE FUNCTION p_bla_bytype(_type text)
RETURNS TABLE (id bigint, name text) AS $$
SELECT id
, data->>'name'
FROM bla
WHERE data->>'type' = $1
$$ LANGUAGE sql;
-- i don't know hot to use "_type" by name not using number ($1)
SELECT * FROM p_bla_bytype('test');
を列名が2回(SELECT
で1、RETURNS
中1)を入力する必要があり、我々はまた、データ型を宣言する必要がありました。
2つ以外の代替/短所がありますか?
CREATE OR REPLACE PARAMETERIZED VIEW pv_bla_bytype(_type TEXT) AS
SELECT id
, data->>'name' "name"
FROM bla
WHERE data->>'type' = $_type
;
SELECT * FROM pv_bla_bytype('test');
ソリューションが必要です:多分このような何か
- を良好なパフォーマンス
- SQL構文はあまり
PostgreSQLのようなソリューションがありますを入力しない
。あなたはそれらをテストする必要があります。 – Bill
なぜ機能を使用しないのですか? http://stackoverflow.com/q/11401749/330315 –
投稿されているので、どこにも問題が生じていないようです。本当の問題は何ですか? –