PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres löst den Prüfbetrag vor dem Löschen aus

Sie könnten dies mit einem AFTER DELETE-Auslöser auf Anweisungsebene erreichen. Innerhalb der Trigger-Funktion können Sie die Anzahl der betroffenen Zeilen zählen und eine Ausnahme auslösen, wenn die Anzahl zu hoch ist. Die Ausnahme erzwingt ein Rollback der Transaktion, die den Löschvorgang initiiert hat.

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;

Und erstellen Sie dann den Trigger:

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