PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Valor da verificação do acionador do Postgres antes da exclusão


Você pode conseguir isso com um gatilho de nível de instrução AFTER DELETE. Dentro da função de gatilho, você pode contar o número de linhas afetadas e lançar uma exceção se a contagem for muito alta. A exceção forçará uma reversão da transação que iniciou a exclusão.
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 então crie o gatilho:
create trigger prevent_mass_delete 
   after delete on the_table
   referencing old table as old_table
   for each statement 
   execute procedure prevent_delete();