Няма ORDER BY в UPDATE команда.
Но има за SELECT . Използвайте заключване на ниво ред
с FOR UPDATE клауза
в подзаявка:
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;
Разбира се, b трябва да е UNIQUE или трябва да добавите още изрази към ORDER BY клауза, за да стане недвусмислено.
И трябва да наложите една и съща поръчка за всички UPDATE , DELETE и SELECT .. FOR UPDATE изявления на масата.
Свързани, с повече подробности:
- Postgres АКТУАЛИЗИРАНЕ … ЛИМИТ 1
- Избягване на задънени блокировки на PostgreSQL при извършване на операции за групово актуализиране и изтриване
- Оптимизиране на едновременните актуализации в Postgres