我无法理解https://www.postgresql.org/docs/9.1/static/explicit-locking.html
中的示例他们将锁与SELECT子句一起嵌入
SELECT pg_advisory_lock(id) FROM foo WHERE id = 12345; -- ok
从FOO
中选择什么?如果它像
SELECT pg_advisory_lock(123); //lock
SELECT * FROM foo WHERE id = 12345;
它显式锁定块。我似乎无法找到解释如何在任何地方真正使用咨询锁定来解释嵌入和明确地在其自己的陈述之间的差异。
答案 0 :(得分:2)
执行SELECT pg_advisory_lock(123);
会在123
上创建一个锁,无论它是否为有效值。仅当表foo中存在ID 123的条目时,执行SELECT pg_advisory_lock(id) FROM foo WHERE id = 123;
才会创建锁。
让我们注意pg_locks doc中找到的行:
键的实际含义取决于用户
这往往意味着select / from / where语法用于将锁定与现有行相关联,而单独的select语法用于更广泛的含义,例如应用程序范围的锁定。