【发布时间】:2016-09-04 09:37:20
【问题描述】:
我需要为一个用户锁定行以防止其他用户更改内容。
User A: call function lock_row() to lock row X
User B: call function lock_row() to lock row X (lock cant be created and "exception" should be triggered as row X is already locked)
不可能有用户 A 和 B 使用同一个会话连接的情况。
那么如何确保不会发生类似的事情:
User A: check if lock == 0
User B: check if lock == 0
User A: lock == 0 so SET lock = 1
User B: lock == 0 is also here so SET lock = 1
我想不通过触发器直接在 SQL 语句上创建锁(在行上更新),而是通过函数来允许用户在出现意外错误时释放锁。
如何创建“临界区”?如何确保函数中的关键部分正确执行?
PostgreSQL 版本 9.x.
【问题讨论】:
-
主要 Postgres 版本包括点后的第一个数字。没有版本“9.x”,它是 9.4 或 9.5 等。
标签: database postgresql concurrency locking