【发布时间】:2012-02-01 06:26:49
【问题描述】:
尝试使用规则维护编辑日志。
create table t1(
id serial primary key,
c1 text,
... );
create table edit_log(
id int references t1,
editor_id int references users,
edit_ts timestamp default current_timestamp );
有更新,希望update t1和insert into edit_lot
update t1 set c1='abc', ... where id=456;
insert into edit_log( id, editor_id, current_timestamp );
对于任意数量的列,这将是一个非常简单的 except,例如,
update t1 set c1='abc', c2='def', editor_id=123 where id=456;
update t1 set c3='xyz', editor_id=123 where id=456;
如何为此编写规则?
【问题讨论】:
-
可以用 ALSO 规则完成,试试吧。不要忘记日志表的 PK 将是 {id,edit_ts}。插入应该总是检查日志表中的“NOT EXISTS”。删除有点特殊。并且总是检查生成的查询计划。
-
right - ALSO Rule 规则(原样)。但是如何处理任意数量的列?
-
由于您只记录事件(而不是数据),因此任意列都无关紧要。一条记录被更新(插入、删除)命中,或者不是。也许我不明白你的意思?
标签: sql postgresql rules