Bertentangan dengan komentar, penyisipan bersamaan pada tabel yang sama sepenuhnya diizinkan di PostgreSQL, jadi ada kondisi balapan di sini.
Untuk membuat ini aman, Anda harus memiliki unique
batasan (atau primary key
) pada column_name
. Sisipan duplikat kemudian akan memunculkan pengecualian yang dapat Anda tangkap dan coba lagi dengan pembaruan.
Jika Anda tidak memiliki batasan unik, maka Anda harus LOCK TABLE ... IN EXCLUSIVE MODE
untuk mencegah upser bersamaan. Atau gunakan salah satu metode aman-konkurensi yang dijelaskan di:
Bagaimana cara UPSERT (MERGE, INSERT ... ON DUPLICATE UPDATE) di PostgreSQL?