手动释放Postgres LOCK

mas*_*ize 2 postgresql locking transactions

我想知道是否有任何命令来解锁或释放由同一事务发出的锁.

伪代码

FUNCTION
    TRANSACTION
        LOOP
            TABLE LOCK
            table operations...
            "TABLE UNLOCK WANTED"
        END
    END OF TRANSACTION
END OF FUNCTION
Run Code Online (Sandbox Code Playgroud)

函数查询可能需要一段时间,因为LOOP可能很大,所以我希望能够在事务完成之前解锁.

Cra*_*ger 5

不,这是不可能的.锁定一直持续到交易结束,没有例外.

因此,您需要:

  • 使用非标准锁,如咨询锁,这需要每个人检查并尊重它; 要么

  • 在外部事务完成之前,在自动提交的事务中执行您的工作.在PostgreSQL中,缺乏自主的子事务支持意味着您必须使用dblink.