2016-08-25 10 views
1

SELECTステートメントのWHERE句内の単語をルール(CREATE RULE myrule AS ON SELECT TO mytable ...)で置き換えることはできますか?WHERE句で単語を置換するPostgresルール

SELECT col1, col2 
FROM mytable 
WHERE col2 = 1; 

SELECT col1, col2 
FROM mytable 
WHERE col3 = 1; 

初期文が置換を許可していないクライアントによって発行さになるはずです。したがって、データベース側で代入を行う必要があります。

**編集**

私は十分に特定されていない可能性があります。 この種のselect文のパターンには、列名の置換が必要です。 WHERE句は常に変化します。 ルール自体の現在のSELECTステートメントを参照することは可能ですか?

これは私が必要なものである最低限に分解:

  • を交換する(それは、この特定のパターンを持っている場合)

    • は、現在のSELECTステートメントを取る「WHERE COL2」と「WHERE col3という」
    • 物事のデータベース側で展開することができるルールに詰め
  • +0

    3つのパラメータ(リテラルではなく)をすべて渡してから処理することで、空のパラメータを取得したときにtrueになるようにすることができます。たとえば、where(col1 =?または?はnull)、(col2 =?または?はnull) ' – Hambone

    +0

    いいえ、不可能です。ルールを設定できる場合、クエリは 'col1、col2'の代わりに' col1、col3'を返します。 – klin

    +0

    WHERE句のテーブル名のみが置き換えられることを確認するために、私の例の置換がWHEREを含む理由 – andehhh

    答えて

    1

    使用case when声明

    SELECT col1, col2, col3 
    FROM mytable 
    WHERE CASE WHEN foo='bar' THEN col3 ELSE col1 END = 1;