【发布时间】:2014-10-29 03:50:02
【问题描述】:
我有一个 PostgreSQL 数据库。它的一个表有时会更新,但至关重要的是,它不能由多个用户同时更新。更新完成后,应该允许另一个用户更新表
我可以只使用 PostgreSQL 限制一个用户同时更新表的访问权限吗?
【问题讨论】:
-
是的,您可以在事务期间锁定表,但这是一个非常糟糕的主意,原因可能超出了这个问题的范围。
标签: postgresql
我有一个 PostgreSQL 数据库。它的一个表有时会更新,但至关重要的是,它不能由多个用户同时更新。更新完成后,应该允许另一个用户更新表
我可以只使用 PostgreSQL 限制一个用户同时更新表的访问权限吗?
【问题讨论】:
标签: postgresql
当然,这样做很正常,但不是你想的那样。
这是正常的,有时也是解决并发问题的最简单方法:
BEGINLOCK TABLE ... IN EXCLUSIVE MODECOMMIT但只有在您不等待用户的情况下才可以。在事务期间,您只能将LOCK 保存在表上,由于许多原因,让长时间运行的事务在用户思考某事时保持打开状态是一个坏主意。由于用户不明显的原因,它往往会使应用程序的其他部分停止,它会在自动数据库清理过程中产生问题,它会鼓励死锁等等。馊主意。不要这样做:
BEGINLOCK TABLE ... IN EXCLUSIVE MODECOMMIT为此,您通常需要optimistic concurrency control、advisory locks 或应用程序管理的用户锁定方案。
【讨论】: