Maybaygiare.org

Blog Network

PostgreSQL – TRIGGERS

Advertisements

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;
reklámok

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.