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

时间:2014-09-04 11:50:28

标签: postgresql

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

我是否可以仅使用PostgreSQL限制一个用户更新表的访问权限?

1 个答案:

答案 0 :(得分:4)

当然,这样做是很正常的,但不是你想要的方式。

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

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

但是如果你没有等待用户,它才真的没问题。在交易过程中,您只能在桌面上持有LOCK,并且由于许多原因,当用户考虑某事时,长时间运行的交易保持打开是一个坏主意。由于用户不明显的原因,它会使应用程序的其他部分失效,它会导致自动数据库清理过程出现问题,它会引发死锁等等。馊主意。不要这样做:

  • BEGIN
  • LOCK TABLE ... IN EXCLUSIVE MODE
  • 等待用户告诉我下一步该怎么做
  • 用户告诉我的东西
  • 重复直到用户说他们已完成
  • COMMIT

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