PostgreSQL trigger: Létrehozás, eldobás példa

Tartalomjegyzék:

Anonim

Mik azok a Postgresql kiváltók?

A PostgreSQL trigger egy olyan funkció, amely automatikusan elindul, amikor egy adatbázis-esemény egy adatbázis-objektumon történik. Például egy táblázat.

Például az adatbázis-eseményekre, amelyek aktiválhatnak egy eseményindítót, szerepelhet az INSERT, az UPDATE, a DELETE stb. Ezenkívül, ha létrehoz egy triggeret egy táblához, akkor az trigger automatikusan leesik, amikor ezt a táblát törlik.

Ebben a PostgreSQL oktatóanyagban a következőket tanulja meg:

  • Mik azok a Postgresql kiváltók?
  • Hogyan használták az eseményindítót a POSRGREQL-ben?
  • Trigger létrehozása
  • A pgAdmin használatával
  • Triggerek eldobása

Hogyan használták az eseményindítót a POSRGREQL-ben?

Az eseményindító megjelölhető a FOR EACH ROW operátorral a létrehozása során. Ilyen ravaszt egyszer hívnak meg minden művelettel módosított sorhoz. Az eseményindító a FOR EACH STATEMENT operátorral is megjelölhető a létrehozása során. Ezt az eseményindítót csak egyszer hajtják végre egy adott művelethez.

Trigger létrehozása

Trigger létrehozásához a CREATE TRIGGER funkciót használjuk. Itt található a függvény szintaxisa:

CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-nameON table-name[-- Trigger logic];

Az eseményindító neve az eseményindító neve.

A BEFORE, AFTER és INSTEAD kulcsszavak határozzák meg, hogy mikor váltják ki az eseményindítót.

Az eseménynév annak az eseménynek a neve, amely az eseményindító meghívását okozza. Ez lehet INSERT, UPDATE, DELETE stb.

A tábla neve annak a táblának a neve, amelyen létre kell hozni az eseményindítót.

Ha az indítót egy INSERT művelethez kívánják létrehozni, hozzá kell adnunk az ON oszlopnév paramétert.

A következő szintaxis ezt bizonyítja:

CREATE TRIGGER trigger-name AFTER INSERT ON column-nameON table-name[-- Trigger logic];

Például:

Az alább megadott ártáblát fogjuk használni:

Ár:

Hozzunk létre egy másik táblázatot, az Ár_Auditokat, ahol naplózni fogjuk az Ártáblázatban végrehajtott módosításokat:

CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL);

Most definiálhatunk egy új függvényt auditfunc néven:

CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$BEGININSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);RETURN NEW;END;$my_table$ LANGUAGE plpgsql;

A fenti funkció beilleszt 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 ravasztfüggvény, meg kell kötnünk az Ár táblázatunkhoz. A kiváltónak megadjuk az price_trigger nevet. Új rekord létrehozása előtt a trigger naplózása automatikusan elindul. Itt van a ravaszt:

CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc();

Helyezzen be egy új rekordot az Ár táblázatba:

INSERT INTO PriceVALUES (3, 400);

Most, hogy beillesztettünk egy rekordot az Ár táblába, egy rekordot is be kell illeszteni az Ár_Audit táblába. Ez annak az eseményindítónak lesz az eredménye, amelyet az Ár táblán hoztunk létre. Ellenőrizzük ezt:

SELECT * FROM Price_Audits;

Ez a következőket adja vissza:

A ravasz sikeresen működött.

Felsorolási kiváltók

A PostgreSQL-ben létrehozott összes eseményindítót a pg_trigger táblázat tárolja. Az adatbázisban lévő eseményindítók listájának megtekintéséhez a SELECT parancs futtatásával kérdezze le a tábláról 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.

Ejtőindítók

A PostgreSQL trigger aktiválásához a DROP TRIGGER utasítást használjuk a következő szintaxissal:

DROP TRIGGER [IF EXISTS] trigger-nameON table-name [ CASCADE | RESTRICT ];

Az trigger-név paraméter a törölni kívánt trigger nevét jelöli.

A tábla neve annak a táblának a nevét jelöli, amelyből törölni kell a ravaszt.

Az IF EXISTS záradék megkísérli törölni a létező ravaszt. Ha az IF EXISTS záradék használata nélkül megpróbál törölni egy nem létező ravaszt, akkor hibaüzenetet kap.

A CASCADE opció segít minden olyan objektum automatikus eldobásában, amely a ravasztól függ.

Ha a KORLÁTOZÁS lehetőséget használja, az indító nem törlődik, ha az objektumok ettől függenek.

Például:

Az example_trigger nevű eseményindító törléséhez az Price táblában futtatjuk a következő parancsot:

Az example_trigger nevű trigger indításához a Vállalat táblára futtassa a következő parancsot:

DROP TRIGGER example_trigger IF EXISTSON Company;

A pgAdmin használatával

Most nézzük meg, hogyan teljesített mindhárom művelet a pgAdmin használatával.

Triggerek létrehozása

Ha ugyanezt szeretné elérni a pgAdmin segítségével, tegye ezt:

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

2. lépés)

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

3. lépés: Az Price_Audits tábla létrehozásához írja be a lekérdezésszerkesztőt:

CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL)

4. lépés) Kattintson az Execute gombra.

5. lépés: 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$BEGININSERT 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övetkező kódot az trigger_indító létrehozásához:

CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc()

7. lépés)

  1. Futtassa a következő parancsot egy új rekord beszúrásához az Ár táblába:
    INSERT INTO PriceVALUES (3, 400)
  2. Futtassa a következő parancsot annak ellenőrzéséhez, hogy be lett-e helyezve egy rekord az Ár_Auditok táblába:
    SELECT * FROM Price_Audits

    Ennek vissza kell adnia a következőket:

8. lépés: Ellenőrizzük az Ár_Audits táblázat tartalmát:

Felsorolási kiváltók

1. lépés: Futtassa a következő parancsot az adatbázis triggerjeinek ellenőrzéséhez:

SELECT tgname FROM pg_trigger

Ez a következőket adja vissza:

Triggerek eldobása

Az example_trigger nevű trigger indításához a Vállalat táblára futtassa a következő parancsot:

DROP TRIGGER example_trigger IF EXISTSON Company

Összegzés:

  • A PostgreSQL eseményindító olyan funkcióra vonatkozik, amely automatikusan elindul, amikor egy adatbázis-esemény, például egy tábla, adatbázis-esemény esetén történik.
  • Ilyen adatbázis-események például az INSERT, UPDATE, DELETE stb.
  • Trigger csak annak az adatbázis-objektumnak az élettartama alatt létezik, amelyre létrehozták.
  • Ha az adatbázis objektum törlődik, akkor a ravaszt is törli.
  • A PostgreSQL triggereket a CREATE TRIGGER utasítás segítségével hozzák létre.
  • Mindegyik ravaszt egy függvényhez társítják, amely meghatározza, hogy az eseményindító mit fog tenni, amikor meghívják.

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