Tidak ada ORDER BY
di UPDATE
perintah.
Tapi ada untuk SELECT
. Gunakan penguncian tingkat baris
dengan FOR UPDATE
klausa
dalam subkueri:
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;
Tentu saja, b
harus UNIQUE
atau Anda perlu menambahkan lebih banyak ekspresi ke ORDER BY
klausa untuk membuatnya tidak ambigu.
Dan Anda perlu menerapkan perintah yang sama untuk semua UPDATE
, DELETE
dan SELECT .. FOR UPDATE
pernyataan di atas meja.
Terkait, dengan detail lebih lanjut:
- PEMBARUAN Pascagres … BATAS 1
- Menghindari kebuntuan PostgreSQL saat melakukan pembaruan massal dan operasi penghapusan
- Mengoptimalkan pembaruan serentak di Postgres