Jawaban langsung untuk pertanyaan Anda adalah dengan menggunakan prosedur tersimpan untuk melakukan upsert.
Sesuatu seperti ini bekerja dengan baik dengan modul pg.
client.query({
text: "SELECT upsert($1, $2, $3, $4, $5, $6)"
values: [ obj.id,
obj.first_name,
obj.last_name,
1,
ip,
date_now.getFullYear() + "-" + month + "-" + date_now.getDate() + " " + date_now.getHours() + ":" + date_now.getMinutes() + ":" + date_now.getSeconds()
]
}, function(u_err, u_result){
if(err) // this is a real error, handle it
// otherwise your data is updated or inserted properly
});
Tentu saja ini mengasumsikan bahwa Anda menggunakan semacam objek model yang memiliki semua nilai yang Anda butuhkan, bahkan jika nilai tersebut tidak berubah. Anda harus melewati mereka semua ke upsert. Jika Anda terjebak melakukannya seperti yang Anda tunjukkan di sini, Anda mungkin harus memeriksa objek kesalahan yang sebenarnya setelah pembaruan untuk menentukan apakah itu gagal karena baris sudah ada di sana, atau karena alasan lain (yang merupakan kesalahan db nyata yang perlu ditangani).
Maka Anda harus berurusan dengan kondisi balapan potensial antara waktu pembaruan Anda gagal dan waktu penyisipan Anda berhasil. Jika beberapa fungsi lain mencoba memasukkan dengan id yang sama, Anda mendapat masalah. Transaksi baik untuk itu. Hanya itu yang saya dapatkan sekarang. Semoga membantu.