本文為您介紹PolarDB PostgreSQL版(兼容Oracle)分區(qū)表中的Before Row-level觸發(fā)器以及其兼容性設(shè)置。
當您跨分區(qū)更新數(shù)據(jù)時,PostgreSQL和Oracle會使用不同的觸發(fā)器行為:
- PostgreSQL:會觸發(fā)多個分區(qū)表的觸發(fā)器。
- Oracle:僅觸發(fā)一次觸發(fā)器。
PolarDB PostgreSQL版(兼容Oracle)默認兼容Oracle的觸發(fā)器行為。
說明
- After Row-level觸發(fā)器暫不兼容Oracle的觸發(fā)器行為。
- 語句級觸發(fā)器(Statement-level Trigger)與普通表用法相同。
參數(shù)設(shè)置
您可以通過polar_compatible_oracle_trigger
來控制Before Row-level觸發(fā)器的兼容性。
polar_compatible_oracle_trigger = off
表示PolarDB PostgreSQL版(兼容Oracle)使用PostgreSQL的觸發(fā)器行為,跨分區(qū)更新數(shù)據(jù)會觸發(fā)多個表的觸發(fā)器。
設(shè)置
polar_compatible_oracle_trigger
參數(shù)語句如下: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的觸發(fā)器行為,跨分區(qū)更新數(shù)據(jù)僅觸發(fā)一次。
設(shè)置
polar_compatible_oracle_trigger
參數(shù)語句如下: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