如果更新包括对特定列的更改,是否可能让PostgreSQL限制/阻止对特定记录的更新?
如何实现这一点? 触发器/约束? 实现这一点最有效的方法是什么?
我正在使用版本9.1
如果更新包括对特定列的更改,是否可能让PostgreSQL限制/阻止对特定记录的更新?
如何实现这一点? 触发器/约束? 实现这一点最有效的方法是什么?
我正在使用版本9.1
最简单的方法是创建一个BEFORE UPDATE
触发器,该触发器将比较OLD
和NEW
行,并且如果行的更改被禁止,则RAISE EXCEPTION
。
你可以使用一个BEFORE UPDATE
触发器,就像其他答案中已经提到的那样。另一个Stack Overflow答案展示了一个这样一个触发器的例子。
你可以将表拆分为两个表,它们之间有一个1:1的关系。然后,你可以为一个表提供SELECT
和UPDATE
权限,而只为另一个表提供SELECT
权限。
你可以只为表的一部分列提供UPDATE
权限:GRANT UPDATE(col1, col2)
(详细信息)。
你可以为表提供只读访问,并创建一个包含可更新列的VIEW
,并授予对其的UPDATE
权限。
你可以使用SECURITY DEFINER
将表隐藏在一个FUNCTION
后面。表本身不提供UPDATE权限,而是用户只能通过函数来更新表。