Joe*_*Joe 7 postgresql trigger
我遇到过这样的情况,我们的数据库中有几十个不同的触发器,它们触发将记录插入到数据库中的另一个(单个)表中。
我希望在测试我们的替换服务器时,有一些简单的方法可以在该单个表上设置触发器以有效地忽略所有其他触发器。(而不是必须删除数十个触发器,然后在我们投入生产时重新启用它们)。
我希望能够使用INSTEAD OF INSERT设置为不执行任何操作的函数的触发器,但您只能在视图上使用这些触发器,而不能在表上使用。我尝试了一个BEFORE INSERT 名为的触发器RAISE EXCEPTION,但这导致整个事务失败,因此对其他表的修改也被拒绝。
是否有一些简单的方法可以忽略对该表的插入,或者我应该做一个AFTER INSERT事后清除记录的操作?
Nei*_*gan 10
是的,使用 BEFORE INSERT 触发器,并返回 null。
现场示例在这里。
create table stuff (
stuff_id int primary key,
thing text
);
create or replace function stuff_inserting() returns trigger language plpgsql as $$
begin
return null;
end $$;
insert into stuff values (1, 'asdf');
select * from stuff; /* returns 1 row */
create trigger inserting before insert on stuff for each row execute procedure stuff_inserting();
insert into stuff values (2, 'fdsa');
select * from stuff; /* still returns only 1 row */
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12402 次 |
| 最近记录: |