<productname>PostgreSQL</productname> supports a powerful <firstterm>rule system</firstterm> for the specification of <firstterm>views</firstterm> and ambiguous <firstterm>view updates</firstterm>. Originally the <productname>PostgreSQL</productname> rule system consisted of two implementations: PostgreSQLには、ビューと理解の仕方でどうとも取れるビューの更新の仕様に対応する強力なルールシステムがあります。 元々PostgreSQLのルールシステムは2つの実装で構成されていました。
The first one worked using <firstterm>row level</firstterm> processing and was implemented deep in the <firstterm>executor</firstterm>. The rule system was called whenever an individual row had been accessed. This implementation was removed in 1995 when the last official release of the <productname>Berkeley Postgres</productname> project was transformed into <productname>Postgres95</productname>. 初めの1つは行レベルの処理を使って動き、エグゼキュータの内部に深く実装されていました。 個別の行がアクセスされる度にルールシステムが呼ばれていました。 この実装は1995年、最後のBerkeley Postgresプロジェクトの公式リリースがPostgres95へ移行する時に削除されました。
The second implementation of the rule system is a technique called <firstterm>query rewriting</firstterm>. The <firstterm>rewrite system</firstterm> is a module that exists between the <firstterm>parser stage</firstterm> and the <firstterm>planner/optimizer</firstterm>. This technique is still implemented. ルールシステムの2つ目の実装は問い合わせ書き換えと呼ばれる手法です。 書き換えシステムは構文解析過程とプランナ/オプティマイザの間にあるモジュールです。 この手法は現在でも実装されています。
The query rewriter is discussed in some detail in <xref linkend="rules"/>, so there is no need to cover it here. We will only point out that both the input and the output of the rewriter are query trees, that is, there is no change in the representation or level of semantic detail in the trees. Rewriting can be thought of as a form of macro expansion. 問い合わせの書き換えについては第39章にて詳しく論議されますので、ここでは取り扱いません。 書き換えの入出力はともに問い合わせツリーである、つまり、ツリー内の表現の仕方や語義をどの程度詳しく判断するかには変更はない、ということを指摘するのに留めます。 書き換えはマクロの拡張と捉えることもできます。