Du kan uppnå det med en AFTER DELETE-utlösare på uttalsnivå. Inuti triggerfunktionen kan du räkna antalet berörda rader och göra ett undantag om antalet är för högt. Undantaget kommer att tvinga fram en återställning av transaktionen som initierade borttagningen.
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;
Och skapa sedan utlösaren:
create trigger prevent_mass_delete
after delete on the_table
referencing old table as old_table
for each statement
execute procedure prevent_delete();