Câu trả lời ngay lập tức cho câu hỏi của bạn là sử dụng quy trình được lưu trữ để thực hiện nâng cấp.
Một cái gì đó như thế này hoạt động tốt với mô-đun 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
});
Tất nhiên điều này giả định rằng bạn đang sử dụng một số loại đối tượng mô hình có tất cả các giá trị bạn cần, ngay cả khi chúng không thay đổi. Bạn phải vượt qua tất cả chúng để nâng cấp. Nếu bạn gặp khó khăn khi thực hiện theo cách bạn đã hiển thị ở đây, bạn có thể nên kiểm tra đối tượng lỗi thực tế sau khi cập nhật để xác định xem nó không thành công vì hàng đã ở đó hay vì một số lý do khác (đó là lỗi db thực sự cần được xử lý).
Sau đó, bạn phải đối phó với điều kiện cuộc đua tiềm năng giữa thời gian cập nhật của bạn không thành công và thời gian chèn của bạn đi qua. Nếu một số chức năng khác cố gắng chèn với cùng một id, bạn đã gặp sự cố. Giao dịch là tốt cho điều đó. Đó là tất cả những gì tôi có ngay bây giờ. Hy vọng nó sẽ hữu ích.