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