2014-09-04 69 views
1

我有一个PostgreSQL数据库。其中的一张表有时会更新,但它至关重要,它不能同时由多个用户更新。当更新完成时,应该允许另一个用户更新表格锁定表,以便一次只有一个用户可以更新它

我可以使用PostgreSQL来限制一个用户更新表格的权限吗?

+0

是的,你可以在交易期间锁定表格,但这是一个非常糟糕的主意,因为可能超出这个问题范围的原因。 – Lucas 2014-09-04 12:01:24

回答

4

当然,这样做很正常,但并不像你想的那样。

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

  • BEGIN
  • LOCK TABLE ... IN EXCLUSIVE MODE
  • ...做一组复杂的更新/插入的/删除
  • COMMIT

但它只有真的好,如果你不在等待用户。在交易过程中,您只能在表格中持有LOCK,并且由于很多原因,长时间运行的交易在用户考虑某些内容时保持打开状态是一个糟糕的主意。它会倾向于让应用程序的其他部分因为用户不明显的原因而停顿,它会导致自动数据库清理过程出现问题,鼓励死锁等等。馊主意。不这样做:为用户

  • BEGIN
  • LOCK TABLE ... IN EXCLUSIVE MODE
  • 迫不及待地告诉我下一步
  • 做的东西的用户告诉我
  • 重复一下,直到用户说,他们大功告成
  • COMMIT

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

相关问题