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.

  • Meghatározás: A trigger egy olyan függvény, amely automatikusan meghívódik egy adatbázis-esemény, például INSERT, UPDATE vagy DELETE esetén.
  • 🔁 Hatály: A FOR EACH ROW függvény minden érintett soronként egyszer futtatja le a triggert, míg a FOR EACH STATEMENT függvény műveletenként egyszer futtatja le.
  • 🇧🇷 Teremt: A CREATE TRIGGER egy függvényt egy táblázathoz köt, és az ELŐTT, UTÁN vagy HELYETT időzítést állítja be.
  • 📋 Lista: A pg_trigger katalógus lekérdezése a SELECT tgname paranccsal az adatbázisban található összes trigger megtekintéséhez.
  • 🗑️ Csepp: A DROP TRIGGER eltávolítja a triggert, az IF EXISTS pedig megakadályozza a hiba okát, ha az hiányzik.
  • 🤖 MI segítség: A mesterséges intelligencia asszisztensek triggerfüggvényeket generálnak, és egyszerű nyelvű kérésekből javasolnak ELŐTTE vagy UTÁNA időzítést.

PostgreSQL Triggerek

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:

PostgreSQL Létrehozás trigger

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:

PostgreSQL Létrehozás trigger

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:

PostgreSQL Listaindító

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

  1. A bal oldali navigációs sávon kattintson az Adatbázisok elemre.
  2. Kattintson a Demo gombra.

Hozzon létre triggert PostgreSQL pgAdmin használatával

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.

Hozzon létre triggert PostgreSQL pgAdmin használatával

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

  1. Futtassa a következő parancsot egy új rekord beszúrásához az ártáblázatba:
INSERT INTO Price
VALUES (3, 400)
  1. 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:

Hozzon létre triggert PostgreSQL pgAdmin használatával

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:

Triggerek listázása a pgAdmin segítségével

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

GYIK

Egy BEFORE trigger a sorváltozás írása előtt fut le, így módosíthatja vagy elutasíthatja a sort. Egy AFTER trigger a módosítás mentése után fut le, ami naplózási és auditálási feladatokhoz alkalmas.

Az INSTEAD OF triggert egy nézeten definiálják, nem egy táblázaton. Az INSERT, UPDATE vagy DELETE parancsokat egyéni logikával helyettesíti, így egy írásvédett nézet írhatóvá válik.

A trigger függvényeket általában PL/pgSQL-ben írják. PostgreSQL PL/-t is támogatPython, PL/Perl, PL/Tcl és C, így kiválaszthatod a logikádnak megfelelő nyelvet.

Az ALTER TABLE táblanév DISABLE TRIGGER triggernév paranccsal kikapcsolhatja, az ENABLE TRIGGER paranccsal pedig újra bekapcsolhatja. Ez elkerüli a hibaüzenetek elvesztését.ping és a trigger újraalkotása tömeges betöltések során.

Igen. Minden egyes trigger munkát ad hozzá az összes érintett sorhoz vagy utasításhoz, így a nehéz triggerlogika lelassíthatja az írást. Tartsa a triggerfüggvényeket röviden, és indexelje az általuk lekérdezett oszlopokat.

Igen. Ha egy trigger egy másik, szintén triggerekkel rendelkező táblát módosít, azok is aktiválódnak, kaszkád jellegű triggereket hozva létre. PostgreSQL korlátozza a beágyazási mélységet a végtelen hurkok elkerülése érdekében.

A mesterséges intelligencia által fejlesztett kódolóasszisztensek egy egyszerű nyelvű kérést egy teljes CREATE TRIGGER utasítássá és triggerfüggvénnyé alakítanak, javaslatot tesznek a BEFORE vagy AFTER időzítésre, és elmagyarázzák a generált PL/pgSQL-t a gyors áttekintés érdekében.

Igen. Az olyan eszközök, mint a pgai és a GPT-alapú asszisztensek, lefordítják a leírt szabályokat trigger SQL-lé, és képesek olyan INSERT triggereket létrehozni, amelyek automatikusan címkézik vagy validálják az új adatokat, amint azok megérkeznek.

Foglald össze ezt a bejegyzést a következőképpen: