postgresql中的建议锁定范围

时间:2017-06-06 03:46:41

标签: postgresql

我是postgresql的新手,并试图了解咨询锁。我有以下两种情况:

  1. 在两个不同的会话中使用不同的数据库:(以预期的方式工作)

    第1节:SELECT pg_advisory_lock(1);成功获取锁

    会话2(在不同的数据库中注释):SELECT pg_advisory_lock(1);成功获取锁

  2. 在同一个数据库中使用不同的模式:当我执行相同的操作时,第二个“会话”阻止。

  3. 咨询锁似乎在数据库级别而不是(数据库和架构)组合中运行。我的假设是正确的还是我遗失了什么?

1 个答案:

答案 0 :(得分:1)

在postgres架构中是命名空间。不仅仅是一个前缀,还不到另一个数据库。在你的情况下,第二个会话不是"阻止",而是等待per docs

  

如果另一个会话已经锁定了同一个资源   标识符,此函数将等待资源变为   可用。

关于在不同数据库上成功锁定: 运行SELECT pg_advisory_lock(1);结帐pg_lockscolumn objid

  

系统目录中锁定目标的OID,如果是,则为null   target不是通用数据库对象

所以这个数字是每个数据库 - 你可以为许多数据库引用相同的 1 - 那些将是不同的OID。