我有一个PostgreSQL数据库。其中一个表有时会更新,但至关重要的是,它不能由多个用户同时更新。更新完成后,应允许其他用户更新表
我是否可以仅使用PostgreSQL限制一个用户更新表的访问权限?
答案 0 :(得分:4)
当然,这样做是很正常的,但不是你想要的方式。
这是正常的,有时是解决并发问题的最简单方法:
BEGIN
LOCK TABLE ... IN EXCLUSIVE MODE
COMMIT
但是如果你没有等待用户,它才真的没问题。在交易过程中,您只能在桌面上持有LOCK
,并且由于许多原因,当用户考虑某事时,长时间运行的交易保持打开是一个坏主意。由于用户不明显的原因,它会使应用程序的其他部分失效,它会导致自动数据库清理过程出现问题,它会引发死锁等等。馊主意。不要这样做:
BEGIN
LOCK TABLE ... IN EXCLUSIVE MODE
COMMIT
为此,您通常需要optimistic concurrency control,advisory locks或应用程序管理的方案来锁定用户数据。