Saya memiliki serangkaian pernyataan SQL yang terlihat seperti berikut:
BEGIN;
SELECT counter FROM table WHERE id=X FOR UPDATE;
REALLY COMPLEX QUERY;
UPDATE table SET counter=Y WHERE id=X;
END;
Saya ingin mencegah penghitung agar tidak dibaca saat saya menghitung ulang nilainya, tetapi menurut dokumen Postgres "Kunci tingkat-baris tidak memengaruhi kueri data; mereka hanya memblokir penulis pada baris yang sama."
Pertanyaan:
- Apa gunanya kunci baris "eksklusif" jika tidak mencegah pembacaan? Apakah hanya untuk mencegah transaksi lain dari mengambil kunci saham?
- Jika saya membaca baris dengan SELECT ... FOR SHARE, apakah itu menghasilkan pengaruh yang sama dengan kunci "eksklusif"?
- Apakah mungkin untuk mematikan MVCC untuk tabel / skema / database dan mengizinkan penulisan di tempat?