すべてのプロダクト
Search
ドキュメントセンター

PolarDB:行レベルのトリガーの前に

最終更新日:Jun 25, 2024

このトピックでは、 パーティションテーブルの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