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.