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

Kapan memilih untuk memperbarui mengunci dan membuka kunci?

Kunci diambil selama (biasanya pada atau di dekat awal) eksekusi perintah. Kunci (kecuali kunci penasehat) dilepaskan hanya ketika transaksi melakukan atau memutar kembali. Tidak ada FOR UNLOCK , juga tidak ada UNLOCK perintah untuk membalikkan efek level tabel LOCK memerintah. Ini semua dijelaskan di bagian kontrol konkurensi dari dokumentasi PostgreSQL.

Anda harus melakukan atau mengembalikan transaksi Anda untuk melepaskan kunci.

Selain itu, tidak masuk akal untuk bertanya "apakah baris ini sudah dihapus oleh transaksi bersamaan lainnya". Itu tidak benar-benar dihapus sampai transaksi yang menghapus baris dilakukan... dan bahkan kemudian, itu mungkin telah menghapus dan memasukkan kembali baris atau transaksi bersamaan lainnya mungkin telah memasukkan baris lagi.

Apakah Anda sedang membangun antrian tugas atau sistem antrian pesan, karena jika demikian, masalah itu terpecahkan dan Anda tidak boleh mencoba menemukan kembali roda rumit yang tidak biasa itu. Lihat PGQ, ActiveMQ, RabbitMQ, ZeroMQ, dll. (Versi PostgreSQL mendatang dapat menyertakan FOR UPDATE SKIP LOCKED karena ini sedang diuji, tetapi belum dirilis pada saat penulisan).

Saya sarankan Anda memposting pertanyaan baru dengan deskripsi yang lebih rinci tentang masalah mendasar yang Anda coba selesaikan. Anda berasumsi bahwa solusi untuk masalah Anda adalah "cari tahu apakah baris telah dihapus" atau "buka kunci baris". Itu mungkin bukan solusi sebenarnya. Ini seperti seseorang yang mengatakan "di mana saya membeli bensin" ketika sepeda dorong mereka tidak jalan sehingga mereka menganggapnya kehabisan bahan bakar. Bahan bakar bukanlah masalah, masalahnya adalah sepeda dorong tidak mengambil bahan bakar dan Anda harus mengayuhnya.

Jelaskan latar belakangnya. Jelaskan apa yang ingin Anda capai. Di atas segalanya, jangan posting pseudocode, posting kode sebenarnya yang bermasalah dengan Anda , sebaiknya dalam bentuk mandiri dan dapat dijalankan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konversi Akses ke PostgreSQL?

  2. Apakah pesanan dalam subquery dijamin untuk dipertahankan?

  3. Mengabaikan zona waktu sama sekali di Rails dan PostgreSQL

  4. Memperbarui JLabel melalui SetIcon dari tipe data bytea di postgres

  5. Heroku Rails 4 tidak dapat terhubung ke server:koneksi ditolak