PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

kunci baris sampai selanjutnya pilih postgres

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengembalikan hanya waktu kerja dari reservasi di PostgreSql?

  2. postgres - di mana di (daftar) - kolom tidak ada

  3. Penggabungan batin dengan SqlAlchemy

  4. Kesalahan sintaks tabel drop postgres

  5. Bagaimana cara mendesain skema database untuk menyimpan teks dalam berbagai bahasa?