我有一个 PostgreSQL 数据库。其中一个表有时会更新,但至关重要的是,它不能被多个用户同时更新。更新完成后,应该允许另一个用户更新表
我可以仅使用 PostgreSQL 限制一个用户在某一时刻更新表的访问权限吗?
最佳答案
当然,这样做很正常,但不是您可能想的那样。
这是解决并发问题的正常方法,有时也是最简单的方法:
开始
以独占模式锁定表...
- ...做一组复杂的更新/插入/删除
提交
但只有当您不在等待用户时才真正可以。在事务期间,您只能在表上保留 LOCK
,出于多种原因,在用户思考某事时让长期运行的事务保持打开状态是一个坏主意。它会使应用程序的其他部分由于用户不明显的原因而停止,它会在自动数据库清理过程中产生问题,它会导致死锁等等。馊主意。不要这样做:
开始
以独占模式锁定表...
- 等待用户告诉我下一步该做什么
- 做用户让我做的事
- 重复直到用户说他们完成了
提交
为此,您通常需要 optimistic concurrency control , advisory locks ,或用于用户数据锁定的应用程序管理方案。
关于postgresql - 锁定一张表,一次只有一个用户可以更新它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25664744/