Няма 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