本文為您介紹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