Topik ini menjelaskan trigger tingkat baris BEFORE dalam tabel partisi PolarDB for PostgreSQL (Compatible with Oracle), serta pengaturan kompatibilitasnya.
Saat memperbarui data lintas partisi, PostgreSQL dan Oracle menggunakan perilaku trigger yang berbeda.
- PostgreSQL: Trigger dari beberapa tabel partisi dipicu.
- Oracle: Trigger yang relevan hanya dipicu satu kali.
Secara default, PolarDB for PostgreSQL (Compatible with Oracle) kompatibel dengan perilaku trigger Oracle.
- Trigger tingkat baris AFTER tidak kompatibel dengan perilaku trigger Oracle.
- Trigger tingkat pernyataan digunakan dengan cara yang sama seperti pada tabel standar.
Pengaturan parameter
Anda dapat mengontrol kompatibilitas trigger tingkat baris BEFORE menggunakan polar_compatible_oracle_trigger.
polar_compatible_oracle_trigger = offPengaturan ini menunjukkan bahwa PolarDB for PostgreSQL (Compatible with Oracle) menggunakan perilaku trigger PostgreSQL. Jika data diperbarui lintas partisi, trigger dari beberapa tabel dipicu.
Untuk mengatur
polar_compatible_oracle_triggerke off, jalankan pernyataan berikut:SET polar_compatible_oracle_trigger = off;Blok kode berikut memberikan contoh penggunaan pengaturan ini:
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 DELETEpolar_compatible_oracle_trigger = onPengaturan ini menunjukkan bahwa PolarDB for PostgreSQL (Compatible with Oracle) menggunakan perilaku trigger Oracle. Jika data diperbarui lintas partisi, trigger yang relevan hanya dipicu satu kali.
Untuk mengatur
polar_compatible_oracle_triggerke on, jalankan pernyataan berikut:SET polar_compatible_oracle_trigger = on;Blok kode berikut memberikan contoh penggunaan pengaturan ini:
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