Összefoglaló: Ebben a bemutatóban megtanulja, hogyan használja a PostgreSQL CREATE TRIGGER
utasítást trigger létrehozására.
Új trigger létrehozásához a PostgreSQL-ben a következő lépéseket kell követnie:
- Először hozzon létre egy trigger függvényt a
CREATE FUNCTION
utasítással. - Második, kösse a triggerfüggvényt egy táblához a
CREATE TRIGGER
utasítással.
Ha nem ismeri a felhasználó által definiált függvények létrehozását, nézze meg a PL/pgSQL fejezetet.
Triggerfüggvény létrehozása szintaxis
A triggerfüggvény hasonló a hagyományos felhasználó által definiált függvényekhez. A triggerfüggvény azonban nem fogad el argumentumokat, és trigger
típusú visszatérési értékkel rendelkezik.
Az alábbiakban a triggerfüggvény létrehozásának szintaxisát szemléltetjük:
Code language: SQL (Structured Query Language) (sql)
Megjegyezzük, hogy triggerfüggvényt a PostgreSQL által támogatott bármely nyelv segítségével létrehozhatunk. Ebben a bemutatóban a PL/pgSQL-t fogjuk használni.
A triggerfüggvény a hívó környezetéről adatokat kap egy speciális, TriggerData nevű struktúrán keresztül, amely egy sor helyi változót tartalmaz.
A OLD
és NEW
például a táblázat sorának a kiváltó esemény előtti vagy utáni állapotát jelenti.
A PostgreSQL más helyi változókat is biztosít, amelyek előtt TG_
áll, például TG_WHEN
, és TG_TABLE_NAME
.
Amint definiáltunk egy triggerfüggvényt, azt egy vagy több triggereseményhez köthetjük, például INSERT
, UPDATE
, és DELETE
.
Elvezetés a PostgreSQL CREATE TRIGGER utasításhoz
A CREATE TRIGGER
utasítás létrehoz egy új triggert. Az alábbiakban a CREATE TRIGGER
utasítás alapvető szintaxisát mutatjuk be:
Code language: SQL (Structured Query Language) (sql)
Ebben a szintaxisban:
Először adja meg a trigger nevét a TRIGGER
kulcsszavak után.
Másodszor adja meg az időzítést, amely a trigger elsütését okozza. Ez lehet BEFORE
vagy AFTER
esemény bekövetkezése.
Harmadszor, adja meg az eseményt, amely kiváltja a kiváltót. Az esemény lehet INSERT
, DELETE
, UPDATE
vagy TRUNCATE
.
Negyedik, adja meg a kiváltóhoz kapcsolódó táblázat nevét a ON
kulcsszó után.
Ötödik, adja meg a triggerek típusát, amely lehet:
- Sor szintű trigger, amelyet a
FOR EACH ROW
záradék határoz meg. - Statement szintű trigger, amelyet a
FOR EACH STATEMENT
záradék határoz meg.
A sorszintű kiváltó minden egyes sorra, míg az utasításszintű kiváltó minden egyes tranzakcióra kioldódik.
Tegyük fel, hogy egy táblának 100 sora van, és két kiváltó, amely a DELETE
esemény bekövetkezésekor kioldódik.
Ha a DELETE
utasítás 100 sort töröl, akkor a sorszintű kiváltó 100 alkalommal, minden törölt sorra egyszer kioldódik. Ezzel szemben az utasítás szintű trigger egyszer fog elsülni, függetlenül attól, hogy hány sort törölnek.
Végül adja meg a EXECUTE PROCEDURE
kulcsszavak után a triggerfüggvény nevét.
PostgreSQL CREATE TRIGGER példa
A következő utasítás létrehoz egy új, employees
nevű táblát:
Code language: SQL (Structured Query Language) (sql)
Tegyük fel, hogy amikor egy alkalmazott neve megváltozik, a változásokat egy külön employee_audits
nevű táblában szeretnénk naplózni:
Code language: SQL (Structured Query Language) (sql)
Először hozzon létre egy új függvényt log_last_name_changes
:
Code language: SQL (Structured Query Language) (sql)
A függvény beilleszti a régi vezetéknevet a employee_audits
táblába, beleértve az alkalmazott azonosítóját, vezetéknevét és a változás időpontját, ha egy alkalmazott vezetékneve megváltozik.
A OLD
a frissítés előtti sort, míg a NEW
a frissítésre kerülő új sort jelöli. A OLD.last_name
a frissítés előtti utónevet, a NEW.last_name
pedig az új utónevet adja vissza.
Második lépés: kösse a kiváltó függvényt a employees
táblához. A kiváltó neve last_name_changes
. A last_name
oszlop értékének frissítése előtt automatikusan meghívja a triggerfüggvényt, hogy naplózza a változásokat.
Code language: SQL (Structured Query Language) (sql)
Harmadszor, beszúr néhány sort a employees
táblába:
Code language: SQL (Structured Query Language) (sql)
Negyedszer, vizsgálja meg a employees
tábla tartalmát:
Code language: SQL (Structured Query Language) (sql)
Tegyük fel, hogy Lily Bush
megváltoztatja a vezetéknevét Lily Brown
-re.
Ötödször, frissítse Lily vezetéknevét az új névre:
Code language: SQL (Structured Query Language) (sql)
Hetedszer, ellenőrizze, hogy Lily
vezetékneve frissült-e:
Code language: SQL (Structured Query Language) (sql)
Mint a kimenetből látható, Lily vezetékneve frissült.
Negyedszer ellenőrizze a employee_audits
tábla tartalmát:
Code language: SQL (Structured Query Language) (sql)
A változást a employee_audits
táblában a trigger naplózta.
Ezzel a bemutatóval megtanulta, hogyan használhatja a PostgreSQL CREATE TRIGGER
-t egy új trigger létrehozásához.
- Az útmutató hasznos volt?
- IgenNem