PostgreSQL Triggerek: létrehozás, listázás és eldobás a példával
⚡ Okos összefoglaló
PostgreSQL A triggerek olyan függvények, amelyek automatikusan lefutnak, amikor egy INSERT, UPDATE vagy DELETE esemény aktiválódik egy táblán, lehetővé téve az adatbázis számára, hogy szabályokat érvényesítsen, naplózza a változtatásokat és auditálja az adatokat extra alkalmazáskód nélkül.

Miben van a Trigger PostgreSQL?
A PostgreSQL ravasz egy olyan függvény, amely automatikusan aktiválódik, amikor egy adatbázis-esemény történik egy adatbázis-objektumon, például egy táblázaton. Az eseményindítót aktiváló adatbázis-események például az INSERT, UPDATE, DELETE stb. Továbbá, amikor létrehoz egy eseményindítót egy táblázathoz, az eseményindító automatikusan elvész, amikor a tábla törlődik.
Hogyan használják a Triggert? PostgreSQL?
Egy trigger a létrehozása során megjelölhető a FOR EACH ROW operátorral. Egy ilyen trigger a művelet által módosított minden egyes sorhoz egyszer meghívódik. Egy trigger a létrehozása során szintén megjelölhető a FOR EACH STATEMENT operátorral. Ez a trigger egy adott művelethez csak egyszer lesz végrehajtva.
PostgreSQL Létrehozás trigger
A trigger létrehozásához a CREATE TRIGGER funkciót használjuk. Íme a függvény szintaxisa:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name ON table-name [ -- Trigger logic ];
A triggernév a trigger neve.
A BEFORE, AFTER és INSTEAD OF olyan kulcsszavak, amelyek meghatározzák, hogy az eseményindítót mikor kell meghívni.
Az eseménynév annak az eseménynek a neve, amely a triggert elindítja. Ez lehet INSERT, FRISSÍTÉS, TÖRLÉS stb.
A táblanév annak a táblának a neve, amelyen a triggert létre kell hozni.
Ha a triggert egy INSERT művelethez kell létrehozni, hozzá kell adnunk az ON oszlopnév paramétert.
A következő szintaxis ezt szemlélteti:
CREATE TRIGGER trigger-name AFTER INSERT ON column-name ON table-name [ -- Trigger logic ];
PostgreSQL Hozzon létre trigger-példát
Az alábbi ártáblázatot használjuk:
Ár:
Hozzunk létre egy másik táblát Price_Audits néven, ahol naplózzuk az Ár táblában végrehajtott változtatásokat:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL );
Most már definiálhatunk egy új, auditfunc nevű függvényt:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$ BEGIN INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp); RETURN NEW; END; $my_table$ LANGUAGE plpgsql;
A fenti függvény beszúr egy rekordot az Price_Audits táblába, beleértve az új sorazonosítót és a rekord létrehozásának idejét.
Most, hogy megvan a trigger függvény, össze kell kötnünk a Price táblánkkal. A triggernek a price_trigger nevet adjuk. Mielőtt új rekord jönne létre, a trigger függvény automatikusan meghívódik a változások naplózásához. Íme a trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc();
Szúrjunk be egy új rekordot az Ártáblázatba:
INSERT INTO Price VALUES (3, 400);
Most, hogy beszúrtunk egy rekordot a Price táblába, a létrehozott trigger miatt a Price_Audits táblába is be kell szúrni egy rekordot. Nézzük meg ezt:
SELECT * FROM Price_Audits;
Ez a következőt adja vissza:
A trigger sikeresen működött.
PostgreSQL Listaindító
Minden aktiváló, amelyben létrehozol PostgreSQL a pg_trigger táblában vannak tárolva. A rajta lévő triggerek listájának megtekintéséhez adatbázis, lekérdezheti a táblát a SELECT parancs futtatásával az alábbiak szerint:
SELECT tgname FROM pg_trigger;
Ez a következőket adja vissza:
A pg_trigger tábla tgname oszlopa a trigger nevét jelöli.
PostgreSQL Ledobó ravasz
Amikor a ravaszra már nincs szükség, ugyanolyan könnyen eltávolíthatja. Egy eldobásához PostgreSQL trigger, a DROP TRIGGER utasítást a következő szintaxissal használjuk:
DROP TRIGGER [IF EXISTS] trigger-name
ON table-name [ CASCADE | RESTRICT ];
A trigger-name paraméter a törölni kívánt trigger nevét jelöli.
A táblanév annak a táblának a nevét jelöli, amelyből a triggert törölni kell.
Az IF EXISTS záradék egy létező eseményindítót próbál törölni. Ha olyan triggert próbál meg törölni, amely nem létezik az IF EXISTS záradék használata nélkül, hibaüzenetet fog kapni.
A CASCADE opció segít automatikusan eldobni minden olyan objektumot, amely a triggertől függ.
Ha a KORLÁTOZÁS opciót használja, a trigger nem törlődik, ha az objektumok attól függnek.
Például:
Az example_trigger nevű trigger eldobásához a Vállalat táblában futtassa a következő parancsot:
DROP TRIGGER example_trigger IF EXISTS
ON Company;
pgAdmin használatával
Most nézzük meg, hogyan hajtható végre mindhárom művelet a pgAdmin használatával.
Hogyan hozzunk létre triggert PostgreSQL pgAdmin használatával
Így hozhatsz létre egy triggert a PostgreSQL pgAdmin használatával:
1. lépés) Jelentkezzen be pgAdmin fiókjába
Nyisd meg a pgAdmin-t, és jelentkezz be a fiókodba a hitelesítő adataiddal.
2. lépés) Hozzon létre egy bemutató adatbázist
- A bal oldali navigációs sávon kattintson az Adatbázisok elemre.
- Kattintson a Demo gombra.
3. lépés) Írja be a lekérdezést
A Price_Audits tábla létrehozásához írja be a lekérdezést a szerkesztőbe:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL )
4. lépés) Végezze el a lekérdezést
Kattintson a Végrehajtás gombra.
5. lépés) Futtassa a Code az auditfunchoz
Futtassa a következő kódot az auditfunc függvény meghatározásához:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$ BEGIN INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp); RETURN NEW; END; $my_table$ LANGUAGE plpgsql
6. lépés) Futtassa a Code trigger létrehozása
Futtassa a következő kódot a trigger price_trigger létrehozásához:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc()
7. lépés) Szúrjon be egy új rekordot
- Futtassa a következő parancsot egy új rekord beszúrásához az ártáblázatba:
INSERT INTO Price VALUES (3, 400)
- Futtassa a következő parancsot annak ellenőrzésére, hogy bekerült-e rekord a Price_Audits táblába:
SELECT * FROM Price_Audits
Ennek a következőt kell visszaadnia:
8. lépés) Ellenőrizze a táblázat tartalmát
Vizsgáljuk meg a Price_Audits tábla tartalmát.
Triggerek listázása a pgAdmin segítségével
Step 1) Futtassa a következő parancsot az adatbázisban lévő triggerek ellenőrzéséhez:
SELECT tgname FROM pg_trigger
Ez a következőket adja vissza:
Cseppping pgAdmin használatával aktivált triggerek
Az example_trigger nevű trigger eldobásához a Vállalat táblában futtassa a következő parancsot:
DROP TRIGGER example_trigger IF EXISTS
ON Company
Töltse le az oktatóanyagban használt adatbázist







