PostgreSQL CREATE TRIGGER

Ö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

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

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