Postgres の rule システム

Postgresview およびいずれとも解釈される view update の仕様 を決定する強力な rule システムを支援しています。当初から Postgres の rule システムは二つの実装から なっていました。

Postgres の構文と rule 作成に関しては The PostgreSQL User's Guide を参照して 下さい。

書き換えシステム

問合せ書き換えシステムはパーサステージと プランナ/オプティマイザの間に位置するモジュールです。このモジュールは (ユーザの問合せを表す)パーサレベルによって返されるツリーの処理を行い、 その問合せに適用されるべき rule が存在する場合、そのツリーを別の形式に 書き換えます。

view を実装する技術

ここで問合せ書き換えシステムのアルゴリズムの概略を見てみることに します。よりわかりやすく図示するための例として rule を用いた view の実装を示します。

下記の rule が与えられたと仮定します。

  create rule view_rule
  as on select 
  to test_view
  do instead
     select s.sname, p.pname
     from supplier s, sells se, part p
     where s.sno = se.sno and
           p.pno = se.pno;   
      

与えられた rule はリレーション test_view に対する select が検出されたとき起動されます。 test_view からタプルを select するのではなく、rule の アクション部 で与えられた select 文が実行されます。

下記の test_view に対するユーザ問合せが与えられたと 仮定します。

  select sname 
  from test_view
  where sname <> 'Smith';
      

ここに test_view に対するユーザ問合せがあった時に 問合せ書き換えシステムが行う一連の作業を示します。(下記のリストは 基本的な理解のためのもの便宜的アルゴリズムです。詳細については Stonebraker et al, 1989 を参照して下さい。

test_view 書き換え

  1. rule の アクション部で与えられた問合せの取得

  2. ユーザ問合せで与えられた属性の数値と優先度に見合うターゲット リストの適用

  3. ユーザ問合せの where 句による条件の rule のアクション 部で与えられる問合せの条件への追加

上記で与えられた rule の定義により、ユーザ問い合わせは以下の形式 に書き換えられます。(書き換えはパーサステージによって引き渡される ユーザ問合せの内部表現として行われますが、派生した新規のデータ構造 は以下の問合せとなります。)

  select s.sname
  from supplier s, sells se, part p
  where s.sno = se.sno and
        p.pno = se.pno and
        s.sname <> 'Smith';