Можете да постигнете това с тригер на ниво израз 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();