The following rules govern the visibility of data changes in functions that use SPI (or any other C function): SPI(や他の任意のC関数)を使用する関数内のデータの可視性は、以下の規則に従います。
During the execution of an SQL command, any data changes made by the command are invisible to the command itself. For example, in: SQLコマンドの実行中、そのコマンドで行われたデータ変更はそのコマンドからは不可視です。 例えば、
INSERT INTO a SELECT * FROM a;
the inserted rows are invisible to the <command>SELECT</command>
part.
では、挿入された行はSELECT
部からは不可視です。
Changes made by a command C are visible to all commands that are started after C, no matter whether they are started inside C (during the execution of C) or after C is done. コマンドCで行われた変更は、Cの後に開始された全てのコマンドからは可視です。 Cの内側(処理中)に開始したかCの処理後に開始したかは関係ありません。
Commands executed via SPI inside a function called by an SQL command (either an ordinary function or a trigger) follow one or the other of the above rules depending on the read/write flag passed to SPI. Commands executed in read-only mode follow the first rule: they cannot see changes of the calling command. Commands executed in read-write mode follow the second rule: they can see all changes made so far. SQLコマンドによって呼び出される関数(普通の関数やトリガ関数)の内側で、SPIを使用して実行されるコマンドは、SPIに渡される読み書きフラグに応じて上の規則のいくつかに従います。 読み取りのみモードで実行されるコマンドは、呼び出し中のコマンドの変更は不可視であるという最初の規則に従います。 読み書きモードで実行されるコマンドは、今までに行われた変更はすべて可視であるという2番目の規則に従います。
All standard procedural languages set the SPI read-write mode
depending on the volatility attribute of the function. Commands of
<literal>STABLE</literal> and <literal>IMMUTABLE</literal> functions are done in
read-only mode, while commands of <literal>VOLATILE</literal> functions are
done in read-write mode. While authors of C functions are able to
violate this convention, it's unlikely to be a good idea to do so.
標準の手続き言語は全て、関数の変動属性に応じてSPI読み書きモードを設定します。
STABLE
およびIMMUTABLE
関数のコマンドは、読み取りのみモードで行われ、VOLATILE
関数のコマンドは読み書きモードで行われます。
C言語関数の作者はこの規約を無視することができますが、それはほとんどの場合勧められません。
The next section contains an example that illustrates the application of these rules. 次節には、これら規則の適用についてを示す例があります。