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