pushLog
function mengkomit setiap sisipan secara terpisah, dan komit lambat.
Seperti yang dijelaskan dalam Mengisi Database dokumentasi :
Juga:
Namun dalam kasus Anda, itu akan menjadi masalah daripada keuntungan, karena setiap INSERT mungkin gagal pada pelanggaran kunci utama, sehingga membatalkan INSERT sebelumnya sejak komit terakhir. Perhatikan bahwa ini juga akan menjadi masalah dengan COPY
, haruskah Anda menggunakannya.
Karena sangat penting untuk mengelompokkan kueri dalam transaksi untuk kinerja, Anda perlu menangani pelanggaran kunci utama dengan cara yang tidak membatalkan transaksi.
Dua metode biasanya digunakan:
-
Hindari kesalahan:
INSERT INTO... WHERE NOT EXISTS (SELECT 1 FROM table WHERE primary_key=...)
-
Jebakan kesalahan dengan memasukkan di dalam fungsi plpgsql yang memiliki blok PENGECUALIAN yang mengabaikannya. INSERT spesifik yang menyebabkan duplikat akan dibatalkan tetapi transaksi tidak akan dibatalkan.
Jika Anda memiliki penyisipan bersamaan, metode ini perlu disempurnakan dengan strategi penguncian.