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

Postgres udløser checkbeløb før sletning

Du kan opnå det med en AFTER DELETE-udløser på sætningsniveau. Inde i triggerfunktionen kan du tælle antallet af berørte rækker og smide en undtagelse, hvis antallet er for højt. Undtagelsen vil fremtvinge en tilbagerulning af transaktionen, der startede sletningen.

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;

Og opret derefter triggeren:

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



  1. Anslået antal rækker, der skal læses

  2. Sådan opretter du en databasedrevet navigationsmenu på flere niveauer ved hjælp af Laravel

  3. Oracle :vælg maksimal værdi fra forskellige kolonner i samme række

  4. Hvordan kan jeg bruge en samling i en Oracle SQL-sætning