sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres utlöser checkbeloppet innan radering

Du kan uppnå det med en AFTER DELETE-utlösare på uttalsnivå. Inuti triggerfunktionen kan du räkna antalet berörda rader och göra ett undantag om antalet är för högt. Undantaget kommer att tvinga fram en återställning av transaktionen som initierade borttagningen.

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;

Och skapa sedan utlösaren:

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



  1. onlinebokningskoncept för hotellrum i php

  2. Oracle Konvertera TIMESTAMP med tidszon till DATUM

  3. Vad är datatypen SQL national character (NCHAR) egentligen till för?

  4. Ta bort enstaka citattecken från where_in i codeigniter