【发布时间】:2019-07-11 11:31:21
【问题描述】:
我正在尝试在触发器之前创建一个 postgres,以在实际删除之前检查将要删除的记录数量。例如不删除超过 5 条记录
【问题讨论】:
-
为什么不在
delete语句本身中这样做? -
我想将其用作安全功能。这样您就不必在应用程序中构建这些检查
标签: sql postgresql triggers
我正在尝试在触发器之前创建一个 postgres,以在实际删除之前检查将要删除的记录数量。例如不删除超过 5 条记录
【问题讨论】:
delete 语句本身中这样做?
标签: sql postgresql triggers
您可以使用 AFTER DELETE 语句级触发器来实现这一点。在触发函数中,您可以计算受影响的行数,如果计数过高则抛出异常。该异常将强制回滚发起删除的事务。
create function prevent_delete()
returns trigger
as
$BODY$
declare
l_count integer;
begin
select count(*)
into l_count
from old_table;
if l_count > 5 then
raise exception 'Too many rows would be deleted';
end if;
return null;
end;
$BODY$
LANGUAGE plpgsql;
然后创建触发器:
create trigger prevent_mass_delete
after delete on the_table
referencing old table as old_table
for each statement
execute procedure prevent_delete();
【讨论】: