このトピックでは、 パーティションテーブルのBEFORE行レベルトリガーと、その互換性設定について説明します。
パーティション間でデータを更新する場合、PostgreSQLとOracleは異なるトリガー動作を使用します。
PostgreSQL: 複数のパーティションテーブルのトリガーが発生します。
Oracle: 関連するトリガーは1回だけ発生します。
デフォルトでは、 はOracleのトリガー動作と互換性があります。
AFTER行レベルのトリガーは、Oracleのトリガー動作と互換性がありません。
ステートメントレベルのトリガーは、標準テーブルと同じ方法で使用されます。
パラメータ設定
polar_compatible_oracle_trigger
を使用して、BEFORE行レベルトリガーの互換性を制御できます。
polar_compatible_oracle_trigger = off
この設定は、 がPostgreSQLのトリガー動作を使用することを示します。 パーティション間でデータが更新されると、複数のテーブルのトリガーが発生します。
polar_compatible_oracle_trigger
をoffに設定するには、次のステートメントを実行します。SET polar_compatible_oracle_trigger = off;
次のコードブロックは、この設定の使用方法の例を示しています。
create trigger t before insert or update or delete on parted for each row execute function trigger_function(); insert into parted values (1, 1, 'uno uno v1'); NOTICE: parted_1: BEFORE ROW INSERT update parted set a = 2; NOTICE: parted_1: BEFORE ROW UPDATE NOTICE: parted_1: BEFORE ROW DELETE NOTICE: parted_2: BEFORE ROW INSERT delete from parted; NOTICE: parted_2: BEFORE ROW DELETE
polar_compatible_oracle_trigger = on
この設定は、 がOracleのトリガー動作を使用することを示します。 パーティション間でデータが更新された場合、関連するトリガーは1回だけ発生します。
polar_compatible_oracle_trigger
をonに設定するには、次のステートメントを実行します。SET polar_compatible_oracle_trigger = on;
次のコードブロックは、この設定の使用方法の例を示しています。
insert into parted values (1, 1, 'uno uno v1'); NOTICE: parted_1: BEFORE ROW INSERT update parted set a = 2; NOTICE: parted_1: BEFORE ROW UPDATE delete from parted; NOTICE: parted_2: BEFORE ROW DELETE