Không có ORDER BY
trong UPDATE
lệnh.
Nhưng có đối với SELECT
. Sử dụng khóa cấp hàng >
với FOR UPDATE
mệnh đề
trong một truy vấn con:
UPDATE foo f
SET a = 1
FROM (
SELECT b FROM foo
WHERE b IN (1,2,3,4)
ORDER BY b
FOR UPDATE
) upd
WHERE f.b = upd.b;
Tất nhiên, b
phải là UNIQUE
hoặc bạn cần thêm nhiều biểu thức hơn vào ORDER BY
để làm cho nó rõ ràng.
Và bạn cần thực thi cùng một lệnh cho tất cả UPDATE
, DELETE
và SELECT .. FOR UPDATE
trên bảng.
Có liên quan, với thêm chi tiết:
- CẬP NHẬT Postgres… LIMIT 1
- Tránh bế tắc PostgreSQL khi thực hiện thao tác xóa và cập nhật hàng loạt
- Tối ưu hóa các cập nhật đồng thời trong Postgres