Các khóa được thực hiện trong khi (thường ở hoặc gần đầu) thực hiện lệnh. Các khóa (ngoại trừ khóa tư vấn) được phát hành chỉ khi một giao dịch cam kết hoặc quay trở lại. Không có FOR UNLOCK
, cũng không có UNLOCK
lệnh đảo ngược tác động của LOCK
cấp bảng yêu cầu. Tất cả điều này được giải thích trong phần kiểm soát đồng thời của tài liệu PostgreSQL.
Bạn phải cam kết hoặc khôi phục giao dịch của mình để giải phóng khóa.
Ngoài ra, không thực sự hợp lý khi hỏi "hàng này đã bị xóa bởi một giao dịch đồng thời khác chưa". Nó không thực sự bị xóa cho đến khi giao dịch xóa hàng cam kết ... và thậm chí sau đó, nó có thể đã xóa và chèn lại hàng hoặc một giao dịch đồng thời khác có thể đã chèn lại hàng.
Bạn có đang tình cờ xây dựng hệ thống hàng đợi tác vụ hoặc hàng đợi tin nhắn không, bởi vì nếu vậy, vấn đề đó đã được giải quyết và bạn không nên cố gắng phát minh lại bánh xe phức tạp bất thường đó. Xem PGQ, ActiveMQ, RabbitMQ, ZeroMQ, v.v. (Các phiên bản PostgreSQL trong tương lai có thể bao gồm FOR UPDATE SKIP LOCKED
vì điều này đang được thử nghiệm, nhưng chưa được phát hành tại thời điểm viết bài).
Tôi khuyên bạn nên đăng một câu hỏi mới với mô tả chi tiết hơn về vấn đề cơ bản mà bạn đang cố gắng giải quyết. Bạn đang giả định rằng giải pháp cho vấn đề của bạn là "tìm hiểu xem hàng đã bị xóa chưa" hoặc "mở khóa hàng". Đó có lẽ không thực sự là giải pháp. Nó hơi giống như ai đó nói "tôi mua xăng ở đâu" khi chiếc xe đẩy của họ không đi nên họ cho rằng nó đã hết xăng. Nhiên liệu không phải là vấn đề, vấn đề là xe đạp đẩy không tốn nhiên liệu và bạn phải đạp chúng.
Giải thích lý lịch. Giải thích những gì bạn đang cố gắng đạt được. Trên hết, đừng đăng mã giả, hãy đăng mã thực mà bạn đang gặp sự cố , tốt nhất là ở dạng khép kín và có thể chạy được.