Ö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 FUNCTIONutasítással. - Második, kösse a triggerfüggvényt egy táblához a
CREATE TRIGGERutasí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 ROWzáradék határoz meg. - Statement szintű trigger, amelyet a
FOR EACH STATEMENTzá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