PostgreSQL Triggers are database callback functions, which are automatically performed/invoked when a specified database event occurs.
Följande är viktiga punkter om PostgreSQL −utlösare –
-
PostgreSQL-utlösaren kan anges för att avfyra
-
innan åtgärden försöks på en rad (innan begränsningar kontrolleras och infoga, uppdatera eller radera försöks)
-
Efter att åtgärden har slutförts (efter att begränsningar har kontrollerats och infoga, uppdatera eller radera har slutförts)
-
i stället för operationen (när det gäller inlägg, uppdateringar eller raderingar i en vy)
-
-
en utlösare som är markerad för varje rad anropas en gång för varje rad som operationen ändras. Däremot körs en utlösare som är markerad för varje uttalande endast en gång för en viss operation, oavsett hur många rader den ändrar.
-
både when-satsen och utlösningsåtgärderna kan komma åt element i raden som infogas, raderas eller uppdateras med referenser till formuläret nytt.kolumn-namn och gammalt.kolumnnamn, där kolumnnamn är namnet på en kolumn från tabellen som utlösaren är associerad med.
-
om en WHEN-klausul tillhandahålls körs de angivna PostgreSQL-satserna endast för rader för vilka when-klausulen är sann. Om ingen when-klausul levereras körs PostgreSQL-satserna för alla rader.
-
om flera utlösare av samma slag definieras för samma händelse, kommer de att avfyras i alfabetisk ordning med namn.
-
nyckelordet före, efter eller i stället för bestämmer när utlösningsåtgärderna ska utföras i förhållande till infogning, modifiering eller borttagning av den associerade raden.
-
Triggers tappas automatiskt när tabellen som de är associerade med tappas.
-
tabellen som ska ändras måste finnas i samma databas som tabellen eller vyn som utlösaren är kopplad till och man måste bara använda tabellnamn, inte databas.tablename.
-
ett begränsningsalternativ när det anges skapar en begränsningsutlösare. Detta är detsamma som en vanlig utlösare förutom att tidpunkten för avtryckaren kan justeras med hjälp av inställda begränsningar. Begränsningsutlösare förväntas ge upphov till ett undantag när de begränsningar de implementerar bryts.
Syntax
den grundläggande syntaxen för att skapa en utlösare är som följer –
CREATE TRIGGER trigger_name event_nameON table_name;
Här kan event_name Infoga, Ta bort, uppdatera och avkorta databasoperation på det nämnda tabellnamnet. Du kan valfritt ange för varje rad efter tabellnamn.
Följande är syntaxen för att skapa en utlösare vid en UPPDATERINGSOPERATION på en eller flera angivna kolumner i en tabell enligt följande −
CREATE TRIGGER trigger_name UPDATE OF column_nameON table_name;
exempel
låt oss överväga ett fall där vi vill behålla granskningsförsök för varje post som infogas i FÖRETAGSTABELLEN, som vi kommer att skapa nyligen enligt följande (släpp FÖRETAGSTABELL om du redan har det).
testdb=# CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);
för att hålla revisionsförsök skapar vi en ny tabell som heter AUDIT där loggmeddelanden kommer att infogas när det finns en post i FÖRETAGSTABELLEN för en ny post −
testdb=# CREATE TABLE AUDIT( EMP_ID INT NOT NULL, ENTRY_DATE TEXT NOT NULL);
här är ID REVISIONSPOST-ID, och EMP_ID är ID, som kommer från FÖRETAGSTABELLEN, och datum kommer att hålla tidsstämpel när posten registreras kommer att skapas i företagets tabell. Så nu, låt oss skapa en trigger på FÖRETAGSTABELLEN enligt följande –
testdb=# CREATE TRIGGER example_trigger AFTER INSERT ON COMPANYFOR EACH ROW EXECUTE PROCEDURE auditlogfunc();
där auditlogfunc() är ett PostgreSQL −förfarande och har följande definition –
CREATE OR REPLACE FUNCTION auditlogfunc() RETURNS TRIGGER AS $example_table$ BEGIN INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, current_timestamp); RETURN NEW; END;$example_table$ LANGUAGE plpgsql;
nu börjar vi det faktiska arbetet. Låt oss börja infoga post i FÖRETAGSTABELLEN vilket bör resultera i att skapa en granskningsloggpost i GRANSKNINGSTABELLEN. Så låt oss skapa en post i FÖRETAGSTABELLEN enligt följande –
testdb=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)VALUES (1, 'Paul', 32, 'California', 20000.00 );
detta kommer att skapa en post i FÖRETAGSTABELLEN, vilket är som följer −
id | name | age | address | salary----+------+-----+--------------+-------- 1 | Paul | 32 | California | 20000
samtidigt skapas en post i GRANSKNINGSTABELLEN. Denna post är resultatet av en trigger, som vi har skapat på insats operation på företaget tabell. På samma sätt kan du skapa dina utlösare vid uppdatering och radering baserat på dina krav.
emp_id | entry_date--------+------------------------------- 1 | 2013-05-05 15:49:59.968+05:30(1 row)
Listing TRIGGERS
Du kan lista alla triggers i den aktuella databasen från pg_trigger −tabellen enligt följande –
testdb=# SELECT * FROM pg_trigger;
ovanstående PostgreSQL-uttalande kommer att lista alla triggers.
Om du vill lista triggers på en viss tabell, använd och klausul med tabellnamn enligt följande −
testdb=# SELECT tgname FROM pg_trigger, pg_class WHERE tgrelid=pg_class.oid AND relname='company';
ovanstående PostgreSQL −uttalande kommer också att lista ner endast en post enligt följande −
tgname----------------- example_trigger(1 row)
Dropping TRIGGERS
Följande är DROP-kommandot, som kan användas för att släppa en befintlig Trigger –
testdb=# DROP TRIGGER trigger_name;