PostgreSQL Triggerek: létrehozás, listázás és eldobás a példával

Miben van a Trigger PostgreSQL?

A PostgreSQL ravasz egy olyan függvény, amely automatikusan aktiválódik, amikor adatbázis-esemény történik egy adatbázis-objektumon. Például egy asztal. Példák azokra az adatbáziseseményekre, amelyek aktiválhatnak egy triggert: INSERT, UPDATE, DELETE stb. Ezen túlmenően, amikor létrehoz egy triggert egy táblához, a trigger automatikusan eldobásra kerül, amikor a tábla törlődik.

Hogyan használják a Triggert? PostgreSQL?

A trigger létrehozása során a FOR EACH ROW operátorral megjelölhető. Egy ilyen trigger egyszer kerül meghívásra minden, a művelet által módosított sorhoz. A trigger létrehozása során a FOR EACH STATEMENT operátorral is megjelölhető. Ez a trigger csak egyszer kerül végrehajtásra egy adott művelethez.

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 az ártáblázatunkkal. A triggernek a price_trigger nevet adjuk. Új rekord létrehozása előtt a rendszer automatikusan meghívja a trigger funkciót 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 az Ár táblába, egy rekordot az Price_Audit táblába is be kell illeszteni. Ez az Ártáblázatban létrehozott trigger eredménye lesz. Ellenőrizzük ezt:

SELECT * FROM Price_Audits;

Ez a következőt adja vissza:

PostgreSQL Létrehozás trigger

A trigger sikeresen működött.

Postgres List Trigger

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:

Postgres List Trigger

A pg_trigger tábla tgname oszlopa a trigger nevét jelöli.

Postgres Drop Trigger

Ledobni a 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 törléséhez a Price táblában a következő parancsot futtatjuk:

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 történt mindhárom művelet a pgAdmin használatával.

Hogyan hozzunk létre triggert PostgreSQL pgAdmin használatával

A következőképpen hozhat létre triggert a Postgresben a pgAdmin segítségével:

1. lépés) Jelentkezzen be pgAdmin fiókjába

Nyissa meg a pgAdmin alkalmazást, és jelentkezzen be fiókjába a hitelesítő adataival

2. lépés) Hozzon létre egy bemutató adatbázist

  1. A bal oldali navigációs sávban 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áblázat 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 az auditfunc kódot

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 kódot a trigger létrehozásához

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)
  2. 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

Nézzük 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

Triggerek eldobása a pgAdmin segítségével

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

Összegzésként

  • A PostgreSQL A trigger olyan függvényre utal, amely automatikusan aktiválódik, amikor adatbázis-esemény történik egy adatbázis-objektumon, például egy táblán.
  • Ilyen adatbázisesemények például az INSERT, UPDATE, DELETE stb.
  • Trigger csak annak az adatbázis-objektumnak az élettartama alatt létezik, amelyhez létrehozták.
  • Ha az adatbázis-objektum törlődik, a trigger is törlődik.
  • PostgreSQL triggerek a CREATE TRIGGER utasítással jönnek létre.
  • Minden trigger egy függvényhez van társítva, amely kimondja, hogy a trigger mit fog tenni, amikor meghívásra kerül.

Töltse le az oktatóanyagban használt adatbázist