sql >> Base de Datos >  >> RDS >> PostgreSQL

Cantidad de verificación de activación de Postgres antes de eliminar

Podría lograrlo con un disparador de nivel de declaración AFTER DELETE. Dentro de la función de activación, puede contar el número de filas afectadas y lanzar una excepción si el recuento es demasiado alto. La excepción forzará una reversión de la transacción que inició la eliminación.

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;

Y luego crea el disparador:

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