Versi singkatnya:"Tergantung".
Versi panjang:
Jika Anda melakukan siklus baca-modifikasi-tulis, maka tidak hanya harus dalam transaksi, tetapi Anda harus SELECT ... FOR UPDATE
catatan apa pun yang nantinya ingin Anda ubah. Jika tidak, Anda akan berisiko kehilangan penulisan, di mana Anda menimpa pembaruan yang dibuat orang lain antara saat Anda membaca catatan dan saat Anda menulis pembaruan.
SERIALIZABLE
isolasi transaksi juga dapat membantu dalam hal ini.
Anda benar-benar perlu memahami konkurensi dan isolasi. Sayangnya satu-satunya jawaban "lakukan X" yang sederhana dan mudah tanpa memahaminya adalah memulai setiap transaksi dengan mengunci semua tabel yang terlibat. Kebanyakan orang tidak ingin melakukan itu.
Saya sarankan membaca (atau dua, atau tiga, atau empat - ini bahan yang sulit) dari dokumen isolasi tx
. Bereksperimenlah dengan psql
secara bersamaan sesi (beberapa terminal) untuk menciptakan kondisi balapan dan konflik.