本文为您介绍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