我对postgresql还不太熟悉(因此也不熟悉规则),我四处查看了一下,但找不到一个调用“global”函数的示例。
我使用的是一个规范化的数据库,其中的行将被标记为已删除而不是已删除。但是,我想为最终用户保留DELETE FROM...
功能,方法是使用替代删除规则更新表的deleted_time
列。因此,每个表都应该能够使用一个公共函数,但我不确定在这个上下文中如何调用它,或者它如何访问NEW
和OLD
?
CREATE OR REPLACE RULE rule_tablename_delete AS ON DELETE
TO tablename DO INSTEAD (
/// call function here to update the table's delete_time column
);
这是正确的方法吗?(我注意到INSTEAD OF触发器仅限于视图)
最佳答案
只需使用更新语句:
create rule rule_tablename_delete as
on delete to tablename
do instead
update tablename
set delete_time = current_timestamp
where id = old.id
and delete_time is null;
假设
id
列是该表的主键。手册中还有一些示例:http://www.postgresql.org/docs/9.1/static/rules-update.html