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