sql >> Databáze >  >> RDS >> PostgreSQL

Postgres spoušť zkontrolujte částku před smazáním

Toho můžete dosáhnout pomocí spouštěče na úrovni příkazu AFTER DELETE. Uvnitř spouštěcí funkce můžete spočítat počet ovlivněných řádků a vyvolat výjimku, pokud je počet příliš vysoký. Výjimka si vynutí vrácení transakce, která iniciovala odstraně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;

A pak vytvořte spouštěč:

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



  1. Cizí klíč PostgreSQL neexistuje, problém dědičnosti?

  2. jak rozdělit a vložit data CSV do nové tabulky v jediném příkazu?

  3. Velikost indexu PostgreSQL a číslo hodnoty

  4. ExecuteNonQuery nevyvolá výjimku při vložení