PostgreSQL 9.1.5文書 | ||||
---|---|---|---|---|
前のページ | 巻戻し | 第 37章ルールシステム | 早送り | 次のページ |
PostgreSQLサーバでは、受け取った問い合わせのそれぞれに対して、INSERT 149592 1のようなコマンド状態文字列を返します。 これは簡単ですが、ルールが使用されていない場合には十分なものです。 しかし、問い合わせがルールにより書き換えられた場合、どのようになるでしょうか。
ルールはコマンド状態に以下のように影響を与えます。
問い合わせに無条件のINSTEADルールが使用されていない場合、元々与えられていた問い合わせが実行され、そのコマンド状態は通常通り返されます (しかし、条件付きINSTEADルールが使用されている場合、その条件の否定が元の問い合わせに追加されることに注意してください。 これにより、処理する行の数が減り、その結果報告される状態が影響を受けるかもしれません)。
問い合わせに無条件のINSTEADルールが使用されている場合、元の問い合わせはまったく実行されません。 この場合、サーバでは、(条件付きもしくは無条件の)INSTEADルールによって挿入され、かつ、元の問い合わせと同じ種類(INSERT、UPDATEまたはDELETE)の最後の問い合わせについてコマンド状態を返します。 この条件に合致する問い合わせがルールによって追加されない場合、返されるコマンド状態は、元の問い合わせの種類と行数およびOIDフィールドに0が表示されます。
(このシステムはPostgreSQL 7.3で確立されました。 それ以前のバージョンでのコマンド状態はルールが存在する場合異なる結果を表示する可能性がありました。)
後者の場合、プログラマは、有効ルールの中でアルファベット順の最後のルール名を与えることによって、必要なINSTEADルールを最後に実行することができます。そして、そのことによって、コマンド状態が確実にそのルールで設定されるようにできます。