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.