Saya memuat data massal dan dapat menghitung ulang semua modifikasi pemicu jauh lebih murah setelah fakta daripada secara baris-demi-baris.
Bagaimana saya bisa menonaktifkan sementara semua pemicu di PostgreSQL?
postgresql
triggers
bulkinsert
David Schmitt
sumber
sumber
ENABLE REPLICA
atauENABLE ALWAYS
.10.4
dan sepertinya mengabaikan pernyataan di atas.PostgreSQL tahu
ALTER TABLE tblname DISABLE TRIGGER USER
perintahnya, yang sepertinya melakukan apa yang saya butuhkan. Lihat ALTER TABEL .sumber
ALTER TABLE ... DISABLE TRIGGER USER
membutuhkan kunci eksklusif di atas meja.Untuk menonaktifkan pemicu
Untuk mengaktifkan pemicu
sumber
ALTER TABLE table_name DISABLE TRIGGER all
Itu tidak bekerja dengan PostgreSQL 9.4 di mesin Linux saya jika saya mengubah tabel melalui editor tabel di pgAdmin dan berfungsi jika saya mengubah tabel melalui permintaan biasa. Perubahan manual dalam tabel pg_trigger juga tidak berfungsi tanpa server restart tetapi permintaan dinamis seperti pada postgresql.nabble.com AKTIFKAN / Nonaktifkan SEMUA PEMICU DALAM DATABASE . Ini bisa berguna ketika Anda membutuhkan penyetelan.
Sebagai contoh jika Anda memiliki tabel di namespace tertentu itu bisa:
Jika Anda ingin menonaktifkan semua pemicu dengan fungsi pemicu tertentu, bisa jadi itu:
Dokumentasi PostgreSQL untuk katalog sistem
Ada opsi kontrol lain proses pemicu pemicu:
ALTER TABLE ... ENABLE REPLICA TRIGGER ... - pelatuk akan menyala dalam mode replika saja.
ALTER TABEL ... AKTIFKAN SELALU PEMICU ... - pelatuk akan selalu menyala (jelas)
sumber
Anda juga dapat menonaktifkan pemicu di pgAdmin (III):
sumber
juga pekerjaan dosis untuk saya di Postgres 9.1. saya menggunakan dua fungsi yang dijelaskan oleh bartolo-otrit dengan beberapa modifikasi. Saya memodifikasi fungsi pertama agar berfungsi bagi saya karena namespace atau skema harus ada untuk mengidentifikasi tabel dengan benar. Kode baru adalah:
maka saya cukup melakukan kueri pemilihan untuk setiap skema:
sumber