sql >> Database >  >> RDS >> PostgreSQL

Postgres-triggercontrolebedrag vóór verwijdering

Je zou dat kunnen bereiken met een AFTER DELETE-trigger op instructieniveau. Binnen de triggerfunctie kun je het aantal getroffen rijen tellen en een uitzondering maken als het aantal te hoog is. De uitzondering dwingt een terugdraaiing af van de transactie die de verwijdering heeft geïnitieerd.

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;

En maak vervolgens de trigger:

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



  1. Slaapstand:Index maken

  2. Select Query gebruiken in een while-lus in php

  3. Mysql Workbench kan geen externe sleutel selecteren

  4. Kan geen verbinding maken met lokale MySQL-server via socket '/tmp/mysql.sock