Phiên bản ngắn gọn:"Nó phụ thuộc".
Phiên bản dài:
Nếu bạn đang thực hiện chu trình đọc-sửa đổi-ghi, thì không chỉ chu trình đó phải ở trong một giao dịch mà bạn phải SELECT ... FOR UPDATE
bất kỳ hồ sơ nào bạn định sửa đổi sau này. Nếu không, bạn sẽ gặp rủi ro khi ghi bị mất, nơi bạn ghi đè lên bản cập nhật mà người khác đã thực hiện từ khi bạn đọc bản ghi và khi bạn viết bản cập nhật.
SERIALIZABLE
cách ly giao dịch cũng có thể giúp giải quyết vấn đề này.
Bạn thực sự cần hiểu về tính đồng thời và sự cô lập. Thật không may, câu trả lời đơn giản, dễ dàng duy nhất "chỉ cần làm X" mà không hiểu nó là bắt đầu mọi giao dịch bằng cách khóa tất cả các bảng có liên quan. Hầu hết mọi người không muốn làm điều đó.
Tôi đề nghị đọc (hoặc hai, ba hoặc bốn - đó là tài liệu khó) tài liệu cách ly tx
. Thử nghiệm với psql
đồng thời phiên (nhiều thiết bị đầu cuối) để tạo ra các điều kiện và xung đột cuộc đua.