Neexistuje žádný ORDER BY v UPDATE příkaz.
Ale existuje pro SELECT . Použijte uzamykání na úrovni řádků
pomocí
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;
Samozřejmě, b musí být UNIQUE nebo potřebujete přidat další výrazy do ORDER BY klauzule, aby to bylo jednoznačné.
A musíte vynutit stejný příkaz pro všechny AKTUALIZACE , DELETE a VYBRAT .. PRO AKTUALIZACI prohlášení na stole.
Související s dalšími podrobnostmi:
- AKTUALIZACE Postgresu … LIMIT 1
- Zabránění zablokování PostgreSQL při provádění operací hromadné aktualizace a mazání
- Optimalizace souběžných aktualizací v Postgres