可以使用 PostgreSQL 触发器来忽略插入吗?

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)

  • @light24bulbs 它将完全跳过插入 (3认同)