PostgreSQL Triggers are database callback functions, which are automatically performed/invoked when a specified database event occurs.
a következő fontos pontokat PostgreSQL kiváltó −
-
PostgreSQL trigger lehet megadni, hogy tűz
-
mielőtt a művelet kísérlet egy sorban (mielőtt megszorítások vannak jelölve, és a Beszúrás, frissítés vagy törlés megkísérelt)
-
a művelet befejezése után (miután megszorítások vannak jelölve, és a Beszúrás, frissítés, vagy törlés befejeződött)
-
a művelet helyett (Beszúrások, frissítések vagy törlések esetén egy nézetben)
-
-
minden sorhoz egyszer meghívunk egy triggert a művelet módosul. Ezzel szemben az egyes utasításokhoz megjelölt trigger csak egyszer hajt végre egy adott műveletet, függetlenül attól, hogy hány sort módosít.
-
mind a WHEN záradék, mind a trigger műveletek hozzáférhetnek a beillesztett, törölt vagy frissített sor elemeihez az űrlap hivatkozásaival új.oszlop-név és régi.oszlopnév, ahol az oszlopnév annak a táblának a neve, amelyhez a trigger társul.
-
ha WHEN záradékot adunk meg, a megadott PostgreSQL utasítások csak olyan sorokra kerülnek végrehajtásra, amelyeknél a WHEN záradék igaz. Ha nincs WHEN záradék, akkor a PostgreSQL utasítások minden sorra végrehajtásra kerülnek.
-
ha ugyanarra az eseményre több azonos típusú trigger van definiálva, akkor név szerint betűrendben indítják őket.
-
a kulcsszó előtt, után vagy helyett meghatározza, hogy a trigger műveletek mikor kerülnek végrehajtásra a társított sor beillesztéséhez, módosításához vagy eltávolításához képest.
-
A triggerek automatikusan eldobásra kerülnek, amikor a hozzájuk társított tábla leesik.
-
a módosítandó táblának ugyanabban az adatbázisban kell lennie, mint annak a táblának vagy nézetnek, amelyhez a trigger kapcsolódik, és csak a táblanevet kell használni, nem pedig az adatbázist.tablename.
-
a kényszer opció, ha meg van adva, létrehoz egy kényszer triggert. Ez megegyezik a szokásos triggerrel, azzal a különbséggel, hogy a trigger tüzelésének időzítése beállított korlátozásokkal állítható be. A kényszerindítók várhatóan kivételt jelentenek, ha megsértik az általuk végrehajtott korlátozásokat.
szintaxis
a trigger létrehozásának alapvető szintaxisa a következő −
CREATE TRIGGER trigger_name event_nameON table_name;
itt az event_name lehet beszúrni, törölni, frissíteni és csonkolni az adatbázis működését az említett táblán table_name. Opcionálisan megadhatja az egyes sorok után táblázat neve.
a következő a szintaxis létrehozása trigger egy frissítési művelet egy vagy több megadott oszlopát a táblázat az alábbiak szerint –
CREATE TRIGGER trigger_name UPDATE OF column_nameON table_name;
példa
nézzük meg egy eset, amikor szeretnénk tartani audit próba minden rekord kerül beillesztésre a cég tábla, amelyet létre újonnan az alábbiak szerint (csepp cég tábla, ha már van).
testdb=# CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);
az audit próbaverziójának megtartása érdekében létrehozunk egy új táblát AUDIT néven, ahol a naplóüzenetek beillesztésre kerülnek, amikor a vállalati táblában bejegyzés van egy új rekordhoz −
testdb=# CREATE TABLE AUDIT( EMP_ID INT NOT NULL, ENTRY_DATE TEXT NOT NULL);
itt az ID az AUDIT rekord azonosítója, az EMP_ID pedig az azonosító, amely a vállalati táblából származik, és a dátum megőrzi az időbélyeget, amikor a rekord egy új rekordot tartalmaz –
testdb=# CREATE TABLE AUDIT( EMP_ID INT NOT NULL, ENTRY_DATE TEXT NOT NULL);
testdb=# CREATE TRIGGER example_trigger AFTER INSERT ON COMPANYFOR EACH ROW EXECUTE PROCEDURE auditlogfunc();
ahol az auditlogfunc() egy PostgreSQL eljárás, és a következő definícióval rendelkezik −
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;
most elkezdjük a tényleges munkát. Kezdjük a bejegyzés beillesztését a vállalati táblába, amelynek eredményeként létre kell hoznia egy naplóbejegyzést az ellenőrzési táblában. Tehát hozzunk létre egy rekordot a vállalati táblázatban az alábbiak szerint –
testdb=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)VALUES (1, 'Paul', 32, 'California', 20000.00 );
Ez létrehoz egy rekordot a vállalati táblázatban, amely a következő −
id | name | age | address | salary----+------+-----+--------------+-------- 1 | Paul | 32 | California | 20000
ugyanakkor egy rekord jön létre az ellenőrzési táblázatban. Ez a rekord egy trigger eredménye, amelyet a vállalati asztal beszúrási műveletén hoztunk létre. Hasonlóképpen létrehozhat triggereket a frissítési és törlési műveleteknél az Ön igényei alapján.
emp_id | entry_date--------+------------------------------- 1 | 2013-05-05 15:49:59.968+05:30(1 row)
triggerek felsorolása
a pg_trigger táblázatból az aktuális adatbázis összes triggerét felsorolhatja az alábbiak szerint −
testdb=# SELECT * FROM pg_trigger;
a fent megadott PostgreSQL utasítás felsorolja az összes triggert.
Ha fel szeretné sorolni a triggereket egy adott táblán, akkor használja az AND záradékot a táblázat nevével az alábbiak szerint −
testdb=# SELECT tgname FROM pg_trigger, pg_class WHERE tgrelid=pg_class.oid AND relname='company';
a fent megadott PostgreSQL utasítás csak egy bejegyzést sorol fel az alábbiak szerint −
tgname----------------- example_trigger(1 row)
droping triggerek
a következő A DROP parancs, amely a következő kell használni, hogy csepp egy meglévő ravaszt −
testdb=# DROP TRIGGER trigger_name;