Anda dapat memperbaiki masalah ini dengan indeks berikut:
CREATE INDEX accounts_user_idx ON accounts(user_id);
Karena hanya ada sedikit data dalam tabel contoh Anda, Anda harus memberi tahu PostgreSQL untuk menggunakan pemindaian indeks:
SET enable_seqscan=off;
Sekarang contoh Anda akan berhasil!
Jika itu tampak seperti ilmu hitam, lihat rencana eksekusi kueri SELECT
. Anda dan UPDATE
pernyataan.
Tanpa indeks keduanya akan menggunakan pemindaian berurutan pada tabel, sehingga membaca semua baris dalam tabel . Jadi kedua transaksi akan berakhir dengan SIReadLock
di seluruh meja.
Ini memicu kegagalan serialisasi.