我对postgresql还不太熟悉(因此也不熟悉规则),我四处查看了一下,但找不到一个调用“global”函数的示例。
我使用的是一个规范化的数据库,其中的行将被标记为已删除而不是已删除。但是,我想为最终用户保留DELETE FROM...功能,方法是使用替代删除规则更新表的deleted_time列。因此,每个表都应该能够使用一个公共函数,但我不确定在这个上下文中如何调用它,或者它如何访问NEWOLD

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

10-04 14:11
查看更多