0

我是 postgresql 的新手(因此是规则),我环顾四周,但找不到调用“全局”函数的示例。

我正在使用规范化数据库,其中行将被标记为已删除而不是已删除。但是,我想保留DELETE FROM...最终用户的功能,方法是使用而不是删除规则来更新表的deleted_time列。因此,每个表都应该能够使用一个通用函数,但我不确定在这种情况下如何调用它,或者它如何访问NEWand 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 触发器仅限于视图)

4

1 回答 1

4

只需使用 UPDATE 语句:

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

于 2012-06-19T19:39:15.010 回答