Saya tidak berpikir ini mungkin. Anda tidak dapat memblokir akses hanya baca ke tabel (kecuali jika pemilihan dilakukan FOR UPDATE
)
Sejauh yang saya tahu, satu-satunya kesempatan yang Anda miliki adalah menggunakan pg_advisory_lock()
fungsi.
http://www .postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
Tetapi ini membutuhkan pelepasan "manual" dari kunci yang diperoleh melaluinya. Anda tidak akan mendapatkan pembukaan kunci otomatis dengan itu.
Untuk mengunci baris, Anda memerlukan sesuatu seperti ini:
select pg_advisory_lock(id), * from ( select * table1 order by id limit 5 ) t
(Perhatikan penggunaan tabel turunan untuk bagian LIMIT. Lihat tautan manual yang saya posting untuk penjelasannya)
Kemudian Anda perlu menyimpan ID yang diambil dan kemudian memanggil pg_advisory_unlock()
untuk setiap ID.
Jika setiap proses selalu melepaskan semua ID sekaligus, Anda cukup menggunakan pg_advisory_unlock_all()
alih-alih. Maka Anda tidak perlu menyimpan ID yang diambil.
Perhatikan bahwa ini tidak mencegah orang lain membaca baris menggunakan pilihan "normal". Ini hanya akan bekerja jika setiap proses yang mengakses tabel tersebut menggunakan pola yang sama untuk mendapatkan kunci.