Trái ngược với các nhận xét, việc chèn đồng thời trên cùng một bảng hoàn toàn được phép trong PostgreSQL, do đó, có một điều kiện chạy đua ở đây.
Để làm cho điều này an toàn, bạn phải có một unique
ràng buộc (hoặc primary key
) trên column_name
. Sau đó, các chèn trùng lặp sẽ đưa ra một ngoại lệ mà bạn có thể bắt và thử lại bằng bản cập nhật.
Nếu bạn không có ràng buộc duy nhất, thì bạn phải LOCK TABLE ... IN EXCLUSIVE MODE
để ngăn chặn các cảnh báo đồng thời. Hoặc sử dụng một trong các phương pháp an toàn đồng thời được mô tả trong:
Làm cách nào để UPSERT (MERGE, INSERT ... ON DUPLICATE UPDATE) trong PostgreSQL?