postgresql - 锁定一张表,一次只有一个用户可以更新它

标签 postgresql

我有一个 PostgreSQL 数据库。其中一个表有时会更新,但至关重要的是,它不能被多个用户同时更新。更新完成后,应该允许另一个用户更新表

我可以仅使用 PostgreSQL 限制一个用户在某一时刻更新表的访问权限吗?

最佳答案

当然,这样做很正常,但不是您可能想的那样。

这是解决并发问题的正常方法,有时也是最简单的方法:

  • 开始
  • 以独占模式锁定表...
  • ...做一组复杂的更新/插入/删除
  • 提交

但只有当您不在等待用户时才真正可以。在事务期间,您只能在表上保留 LOCK,出于多种原因,在用户思考某事时让长期运行的事务保持打开状态是一个坏主意。它会使应用程序的其他部分由于用户不明显的原因而停止,它会在自动数据库清理过程中产生问题,它会导致死锁等等。馊主意。不要这样做:

  • 开始
  • 以独占模式锁定表...
  • 等待用户告诉我下一步该做什么
  • 做用户让我做的事
  • 重复直到用户说他们完成了
  • 提交

为此,您通常需要 optimistic concurrency control , advisory locks ,或用于用户数据锁定的应用程序管理方案。

关于postgresql - 锁定一张表,一次只有一个用户可以更新它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25664744/

相关文章:

mysql - 在 postgresql 的 WHERE 子查询中使用条件

Python psycopg2 INSERT 查询中的多列

postgresql - 如何使用postgresql测试数据库表中的相关行已被锁定

sql - Postgresql 没有返回任何内容

postgresql - 连接表插入到第三个

sql - 每天为每个值选择一行

ruby-on-rails - `Time.now.utc` Rails 和 `now() at time zone ' utc'` postgres 之间的区别

macos - Brew 无法链接 postgresql OSX Yosemite

javascript - select 返回零行,尽管它应该返回一些条目

postgresql - 如何存储和查询具有树结构的数据库