The <productname>PostgreSQL</productname> server returns a command
status string, such as <literal>INSERT 149592 1</literal>, for each
command it receives. This is simple enough when there are no rules
involved, but what happens when the query is rewritten by rules?
PostgreSQLサーバでは、受け取った問い合わせのそれぞれに対して、INSERT 149592 1
のようなコマンド状態文字列を返します。
これは簡単ですが、ルールが使用されていない場合には十分なものです。
しかし、問い合わせがルールにより書き換えられた場合、どのようになるでしょうか。
Rules affect the command status as follows: ルールはコマンド状態に以下のように影響を与えます。
If there is no unconditional <literal>INSTEAD</literal> rule for the query, then
the originally given query will be executed, and its command
status will be returned as usual. (But note that if there were
any conditional <literal>INSTEAD</literal> rules, the negation of their qualifications
will have been added to the original query. This might reduce the
number of rows it processes, and if so the reported status will
be affected.)
問い合わせに無条件のINSTEAD
ルールが使用されていない場合、元々与えられていた問い合わせが実行され、そのコマンド状態は通常通り返されます
(しかし、条件付きINSTEAD
ルールが使用されている場合、その条件の否定が元の問い合わせに追加されることに注意してください。
これにより、処理する行の数が減り、その結果報告される状態が影響を受けるかもしれません)。
If there is any unconditional <literal>INSTEAD</literal> rule for the query, then
the original query will not be executed at all. In this case,
the server will return the command status for the last query
that was inserted by an <literal>INSTEAD</literal> rule (conditional or
unconditional) and is of the same command type
(<command>INSERT</command>, <command>UPDATE</command>, or
<command>DELETE</command>) as the original query. If no query
meeting those requirements is added by any rule, then the
returned command status shows the original query type and
zeroes for the row-count and OID fields.
問い合わせに無条件のINSTEAD
ルールが使用されている場合、元の問い合わせはまったく実行されません。
この場合、サーバでは、(条件付きもしくは無条件の)INSTEAD
ルールによって挿入され、かつ、元の問い合わせと同じ種類(INSERT
、UPDATE
またはDELETE
)の最後の問い合わせについてコマンド状態を返します。
この条件に合致する問い合わせがルールによって追加されない場合、返されるコマンド状態は、元の問い合わせの種類と行数およびOIDフィールドに0が表示されます。
The programmer can ensure that any desired <literal>INSTEAD</literal> rule is the one
that sets the command status in the second case, by giving it the
alphabetically last rule name among the active rules, so that it
gets applied last.
後者の場合、プログラマは、有効ルールの中でアルファベット順の最後のルール名を与えることによって、必要なINSTEAD
ルールを最後に実行することができます。そして、そのことによって、コマンド状態が確実にそのルールで設定されるようにできます。