2.4. Postgresルールシステム

Postgresビューと あいまいな ビューの更新にも対応できる充実したルールシステム を持っています。もともとは Postgresのルールシステムは二つの実装から 成っていました:

Postgresシステムの構文やルールの作成に関する 情報 については ポストグレスユーザガイドを参照してください。

2.4.1. リライトシステム

問い合わせリライトシステムは構文解析過程と プランナ/オプティマイザ の間にあるモジュールです。このシステムは構文解析過程から返された ツリー(ユーザの 問い合わせを表すもの)を処理し、問い合わせに適用されるべきルールがあった 場合は ツリーをそれに合わせて書き直します。

2.4.1.1. ビューを実装するテクニック

ここでは問い合わせリライトシステムのアルゴリズムをお見せします。    よりわかりやすくするために、ルールを使ってビューを実装する方法 を例として使います。

次のようなルールがあったとします:

  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;   
      

このようなルールは、リレーションtest_viewに対する 選択が 認識されると起動されます。 test_viewからタプルを選択する 代わりにアクションパートのルールが実行されます。

test_viewに対する次のようなユーザ問い合わせが あったとします:

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

ここにあるのは、test_viewに対するユーザ問い合わせが ある度に 問い合わせリライトシステムが実行する過程のリストです。 このリストは基礎的な理解をうながすためのアルゴリズムをとても簡単に 書いたものです。詳しい説明についてはStonebraker et al, 1989) を見て下さい。

test_viewリライト

  1. ルールの実行部分で与えられた問い合わせを受け取る。

  2. ユーザ問い合わせで与えられた属性の数字と順番が合うように ターゲットリストを調整する。

  3. ユーザ問い合わせの where 句で与えられる制限を、ルールのアクション パートで与えられる問い合わせの制限に追加する。

実際には上記のようにルールが定義され、ユーザ問い合わせは次のような形に 書き換えられます。(書き換えは構文解析過程から返されたユーザ問い合わせの 内部表現に適用されますが、新しく作られたデータ構造は次の問い合わせを 表現しています。

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