获取postgres中的咨询锁

fol*_*ldl 7 postgresql locking

我认为必须有一些基本的东西,我不了解postgres中的咨询锁定.如果我在psql命令行客户端上输入以下命令,则该函数两次都返回true:

SELECT pg_try_advisory_lock(20); --> true
SELECT pg_try_advisory_lock(20); --> true
Run Code Online (Sandbox Code Playgroud)

我原以为第二个命令应该返回false,因为应该已经获取了锁.奇怪的是,我确实得到了以下内容,表明已经获得了两次锁:

SELECT pg_advisory_unlock(20); --> true
SELECT pg_advisory_unlock(20); --> true
SELECT pg_advisory_unlock(20); --> false
Run Code Online (Sandbox Code Playgroud)

所以我想我的问题是,如何以一种阻止它再次获得的方式获得咨询锁?

vye*_*rov 13

如果您将尝试从2个不同的PostgreSQL会话中执行此操作,该怎么办?

在文档中查看更多内容.

  • 啊,我明白了,所以一旦一个会话获得一个锁,它就可以再次获得它,但是另一个会话不能.谢谢! (2认同)