PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgres déclenche le montant du chèque avant la suppression

Vous pouvez y parvenir avec un déclencheur au niveau de l'instruction AFTER DELETE. Dans la fonction de déclenchement, vous pouvez compter le nombre de lignes affectées et lever une exception si le nombre est trop élevé. L'exception forcera une annulation de la transaction qui a initié la suppression.

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;

Et créez ensuite le déclencheur :

create trigger prevent_mass_delete 
   after delete on the_table
   referencing old table as old_table
   for each statement 
   execute procedure prevent_delete();