PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Importo dell'assegno di attivazione di Postgres prima dell'eliminazione

Potresti ottenerlo con un trigger a livello di istruzione AFTER DELETE. All'interno della funzione trigger puoi contare il numero di righe interessate e generare un'eccezione se il conteggio è troppo alto. L'eccezione forzerà il rollback della transazione che ha avviato l'eliminazione.

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;

E quindi crea il trigger:

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