全部產品
Search
文件中心

PolarDB:Before Row-level觸發器

更新時間:Jul 06, 2024

本文為您介紹PolarDB PostgreSQL版(相容Oracle)分區表中的Before Row-level觸發器以及其相容性設定。

當您跨分區更新資料時,PostgreSQL和Oracle會使用不同的觸發器行為:

  • PostgreSQL:會觸發多個分區表的觸發器。
  • Oracle:僅觸發一次觸發器。

PolarDB PostgreSQL版(相容Oracle)預設相容Oracle的觸發器行為。

說明
  • After Row-level觸發器暫不相容Oracle的觸發器行為。
  • 語句級觸發器(Statement-level Trigger)與普通表用法相同。

參數設定

您可以通過polar_compatible_oracle_trigger來控制Before Row-level觸發器的相容性。

  • polar_compatible_oracle_trigger = off

    表示PolarDB PostgreSQL版(相容Oracle)使用PostgreSQL的觸發器行為,跨分區更新資料會觸發多個表的觸發器。

    設定polar_compatible_oracle_trigger參數語句如下:

    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

    表示PolarDB PostgreSQL版(相容Oracle)使用Oracle的觸發器行為,跨分區更新資料僅觸發一次。

    設定polar_compatible_oracle_trigger參數語句如下:

    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