Apakah seluruh tabel UPDATE
(tanpa menentukan WHERE
klausa) mengunci tabel di PostgreSQL? Misalnya apakah itu mencegah baris dari dihapus / dimasukkan?
Misalnya jika saya menjalankan
UPDATE t1 SET key = 'value'
Bisakah saya berharap tidak ada baris baru yang akan dimasukkan ke t1
dalam UPDATE
eksekusi?
Jika tidak, dapatkah saya berharap UPDATE
akan memperbarui bahkan baris muncul setelah dimulai? (kunci tidak memiliki DEFAULT 'value'
definisi)
postgresql
locking
origaminal
sumber
sumber
UPDATE
dilaksanakan dengan cara seperti itu untuk memperbarui baris yang baru dimasukkan.Jawaban:
UPDATE tanpa klausa WHERE akan mengunci semua baris dalam tabel, tetapi tidak akan mengunci tabel itu sendiri untuk DML.
Baris tidak dapat dihapus dari transaksi yang berbeda karena mereka dikunci.
Tapi Anda bisa memasukkan baris baru tanpa masalah (dengan asumsi mereka tidak melanggar kendala apa pun).
Setiap baris yang dimasukkan setelah UPDATE tidak akan terlihat oleh pernyataan UPDATE dan karenanya tidak akan diubah.
sumber
UPDATE
tanpaWHERE
.