Összefoglaló: Ez a cikk a PostgreSQL-ben található triggereket tárgyalta. Leírja a különböző típusú triggereket, és példákat ad mindegyikre:

1. Triggerek típusai

2. Trigger létrehozása

1. INSERT esemény trigger

2. INSERT esemény trigger

. UPDATE esemény trigger

3. DELETE esemény trigger

4. Trigger elhagyása

5. Trigger elhagyása

. A triggerek felhasználása

6. Fontos tudnivalók

A “trigger” definíció szerint minden olyan esemény, amely mozgásba hoz egy cselekvést.

A PostgreSQL-ben, ha meghatározott adatbázis eseményekre, például INSERT, UPDATE, DELETE vagy TRUNCATE eseményekre szeretnénk lépéseket tenni, akkor a trigger funkció hasznos lehet, mivel a meghatározott eseményekre meghívja a kívánt funkciót.

A trigger a megadott táblához, nézethez vagy idegen táblához kapcsolódik, és akkor hajtja végre a megadott függvényt, amikor az adott táblán bizonyos műveleteket végeznek. A követelményektől függően létrehozhatunk triggereket az események/műveletek ELŐTT, UTÁN vagy UTÁN.

A triggerek típusai

1. Sor szintű kiváltó:

Például: Ha a kiváltó funkciót FOR EACH ROW (Minden sorra) jelöljük, akkor a kiváltó funkciót minden olyan sorra meghívjuk, amelyet az esemény módosít.

Például: Ha a táblázatban 100 sort UPDATE-zunk, akkor az UPDATE trigger függvény 100-szor lesz meghívva, minden egyes frissített sorhoz egyszer.

2. Kijelentés szintű trigger: A FOR EACH STATEMENT opció minden egyes utasításhoz csak egyszer hívja meg a triggerfüggvényt, függetlenül a módosítandó sorok számától.

Trigger létrehozása

A CREATE TRIGGER SQL-parancs létrehoz egy triggert a megadott objektumon.

A CREATE TRIGGER szintaxisa a következő:

CREATE TRIGGER name { BEFORE | AFTER | INSTEAD OF } { event }ON table_name ] transition_relation_name } ] { ROW | STATEMENT } ]EXECUTE { FUNCTION | PROCEDURE } function_name ( arguments ) where event can be one of: INSERTUPDATE ]DELETETRUNCATE

A részletesebb leírásért és a rendelkezésre álló opciókért nézze meg a PostgreSQL dokumentációját a https://www.postgresql.org/docs/12/sql-createtrigger.html címen.

1. INSERT eseménytrigger

Az INSERT eseménytrigger akkor hívódik meg, amikor az INSERT utasítással új rekordot adunk hozzá egy táblához.

Példa

Nézzünk egy példát egy új trigger létrehozására. Ebben a példában létrehozunk egy új, “Alkalmazott” nevű táblát a következőképpen:

CREATE TABLE "Employee"("EmployeeId" INT NOT NULL,"LastName" VARCHAR(20) NOT NULL,"FirstName" VARCHAR(20) NOT NULL,"Title" VARCHAR(30),"ReportsTo" INT,"BirthDate" TIMESTAMP,"HireDate" TIMESTAMP,"Address" VARCHAR(70),"City" VARCHAR(40),"State" VARCHAR(40),"Country" VARCHAR(40),"PostalCode" VARCHAR(10),"Phone" VARCHAR(24),"Fax" VARCHAR(24),"Email" VARCHAR(60),CONSTRAINT "PK_Employee" PRIMARY KEY ("EmployeeId"));CREATE TABLE "Employee_Audit"("EmployeeId" INT NOT NULL,"LastName" VARCHAR(20) NOT NULL,"FirstName" VARCHAR(20) NOT NULL,"UserName" VARCHAR(20) NOT NULL,"EmpAdditionTime" VARCHAR(20) NOT NULL,);

Egy olyan trigger-t fogunk létrehozni, amely képes egy bejegyzést hozzáadni az “Alkalmazott_Audit” táblához, ha egy új alkalmazotti rekord kerül beillesztésre az “Alkalmazott” táblába. Naplózni fogjuk a felhasználónév adatait, amely hozzáadja a rekordot az “Alkalmazott” táblához.

Adjunk hozzá egy trigger függvényt és CREATE TRIGGER parancsot:

CREATE OR REPLACE FUNCTION employee_insert_trigger_fnc() RETURNS trigger AS$$BEGIN INSERT INTO "Employee_Audit" ( "EmployeeId", "LastName", "FirstName","UserName" ,"EmpAdditionTime") VALUES(NEW."EmployeeId",NEW."LastName",NEW."FirstName",current_user,current_date);RETURN NEW;END;$$LANGUAGE 'plpgsql';CREATE TRIGGER employee_insert_trigger AFTER INSERT ON "Employee" FOR EACH ROW EXECUTE PROCEDURE employee_insert_trigger_fnc();

Mihelyt létrehozzuk a fenti INSERT trigger-t a táblán, az egy új bejegyzést fog hozzáadni az “Alkalmazott_Audit” táblához a következő adatokkal:

trigger_demo=# INSERT INTO "Employee" VALUES(10,' Adams','Andrew','Manager',1,'1962-02-18 00:00:00','2010-08-14 00:00:00','11120 Jasper Ave NW','Edmonton','AB','Canada','T5K 2N1','+1 780 428-9482','+1 780 428-3457','[email protected]');INSERT 0 1trigger_demo=# select * from "Employee" where "EmployeeId" =10;--------------------EmployeeId | 10LastName | AdamsFirstName | AndrewTitle | ManagerReportsTo | 1BirthDate | 1962-02-18 00:00:00HireDate | 2010-08-14 00:00:00Address | 11120 Jasper Ave NWCity | EdmontonState | ABCountry | CanadaPostalCode | T5K 2N1Phone | +1 780 428-9482Fax | +1 780 428-3457Email | [email protected]_demo=#trigger_demo=# select * from "Employee_Audit" ;----+-----------EmployeeId | 10LastName | AdamsFirstName | AndrewUserName | postgresEmpAdditionTime | 2019-11-10

2. UPDATE esemény trigger

A UPDATE esemény trigger az UPDATE utasítás végrehajtásakor kerül meghívásra.

Példa

CREATE TRIGGER verify_user_for_update BEFORE UPDATE ON "Employee" FOR EACH ROWEXECUTE PROCEDURE employee_verify_user_priv();

3. DELETE esemény trigger

Ez a DELETE esemény trigger, amely a rekordokat TÖRLŐ tranzakciókhoz adható hozzá.

Példa

CREATE TRIGGER employee_delete_trigger AFTER DELETE ON "Employee" FOR EACH ROW EXECUTE PROCEDURE aft_delete();

Dropping a Trigger

DROP TRIGGER egy trigger eltávolítására szolgál. A szintaxis nagyon egyszerű.

drop trigger employee_insert_trigger on "Employee" ;

A triggerek felhasználása

1. Ellenőrzés: A triggerek segítségével nyomon követheti a táblázat tranzakcióit az esemény részleteinek naplózásával.

2. Ellenőrző kényszerítés: Létrehozhat olyan triggereket, amelyekkel ellenőrizheti a korlátozásokat, mielőtt a tranzakciót a táblára alkalmazná.

3. Automatikus népességszámlálás: A triggerek használatával automatikusan feltölthetjük a táblák mezőit az új tranzakciók rekordjainak manipulálásával.

Fontos megjegyzendő pontok

1. Ahhoz, hogy egy trigger-t hozzon létre egy táblán, a felhasználónak TRIGGER jogosultsággal kell rendelkeznie a táblán és EXECUTE jogosultsággal a trigger függvényen.

2. A “pg_trigger” rendszerkatalógusban ellenőrizheti az adatbázisban meglévő trigger információkat.

3. Ha több trigger-t hoz létre ugyanazon objektumon ugyanazon eseményre, akkor ezek a trigger-ek a név szerinti betűrendben fognak elsülni.

3.

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

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