我正在从ORACLE迁移。 目前我正在尝试转移这个调用:
lkstat := DBMS_LOCK.REQUEST(lkhndl, DBMS_LOCK.X_MODE, lktimeout, true);
此函数尝试获取锁lkhndl,如果在timeout秒后无法获取,则返回1。
在postgresql中我使用
pg_advisory_xact_lock(lkhndl);
然而,它似乎无限期地等待锁。如果失败,pg_try_advisory_xact_lock会立即返回。是否有一种实现锁获取超时版本的方法?
有lock_timeout设置,但我不确定它是否适用于advisory locks,以及在超时后pg_advisory_xact_lock会如何行动。
SET LOCAL来设置statement_timeout。不幸的是,它只能在会话级别(或者使用LOCAL时,在事务级别)生效,而非语句级别。 - Craig Ringerpg_sleep()调用(但我不确定它的性能如何,我从未编写过类似的代码)。 - pozs