PostgreSQL Trigger: Create, Drop Example

Co jsou spouštěče Postgresql?

Spouštěč PostgreSQL je funkce, která se spustí automaticky, když dojde k databázové události na databázovém objektu. Například tabulka.

Mezi příklady událostí databáze, které mohou aktivovat aktivační událost, patří INSERT, UPDATE, DELETE atd. Navíc, když vytvoříte aktivační událost pro tabulku, aktivační událost bude automaticky odstraněna, když bude tato tabulka odstraněna.

V tomto výukovém programu PostgreSQL se naučíte následující:

  • Co jsou spouštěče Postgresql?
  • Jak se Trigger používá v POSRGREQL?
  • Vytvoření spouštěče
  • Pomocí pgAdmin
  • Spouštění spouštěčů

Jak se Trigger používá v POSRGREQL?

Spouštěč lze během jeho vytváření označit operátorem FOR EACH ROW. Taková spoušť bude vyvolána jednou pro každý řádek upravený operací. Spouštěč lze během jeho vytváření také označit operátorem FOR EACH STATEMENT. Tato spoušť bude provedena pouze jednou pro konkrétní operaci.

Vytvoření spouštěče

K vytvoření spouštěče používáme funkci CREATE TRIGGER. Zde je syntaxe funkce:

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

Název spouštěče je název spouštěče.

BEFORE, AFTER a INSTEAD OF jsou klíčová slova, která určují, kdy bude aktivační událost vyvolána.

Název události je název události, která způsobí vyvolání spouštěče. Může to být INSERT, UPDATE, DELETE atd.

Název-tabulky je název tabulky, ve které má být vytvořen spouštěč.

Pokud má být spouštěč vytvořen pro operaci INSERT, musíme přidat parametr ON název-sloupce.

To ukazuje následující syntaxe:

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

Například:

Použijeme níže uvedenou tabulku cen:

Cena:

Vytvořme další tabulku Price_Audits, kde zaznamenáme změny provedené v tabulce cen:

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

Nyní můžeme definovat novou funkci s názvem auditfunc:

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;

Výše uvedená funkce vloží záznam do tabulky Price_Audits včetně nového ID řádku a času vytvoření záznamu.

Nyní, když máme spouštěcí funkci, měli bychom ji svázat s naší tabulkou cen. Spouštěči dáme název price_trigger. Před vytvořením nového záznamu se automaticky vyvolá spouštěcí funkce, která zaznamená změny. Zde je spouštěč:

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

Vložme nový záznam do tabulky cen:

INSERT INTO PriceVALUES (3, 400);

Nyní, když jsme vložili záznam do tabulky cen, měl by být záznam také vložen do tabulky Price_Audit. To bude výsledkem spouštěče, který jsme vytvořili v tabulce cen. Pojďme to zkontrolovat:

SELECT * FROM Price_Audits;

Tím se vrátí následující:

Spoušť fungovala úspěšně.

Spouštěče výpisů

Všechny spouštěče, které vytvoříte v PostgreSQL, jsou uloženy v tabulce pg_trigger. Chcete-li zobrazit seznam spouštěčů, které máte v databázi, spusťte dotaz v tabulce spuštěním příkazu SELECT, jak je znázorněno níže:

SELECT tgname FROM pg_trigger;

Tím se vrátí následující:

Sloupec tgname tabulky pg_trigger označuje název spouštěče.

Klesající spouštěče

Chcete-li zrušit aktivační událost PostgreSQL, použijeme příkaz DROP TRIGGER s následující syntaxí:

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

Parametr název spouštěče označuje název spouštěče, který má být odstraněn.

Název tabulky označuje název tabulky, ze které má být spouštěč odstraněn.

Klauzule IF EXISTS se pokouší odstranit existující aktivační událost. Pokud se pokusíte odstranit aktivační událost, která neexistuje bez použití klauzule IF EXISTS, zobrazí se chyba.

Možnost CASCADE vám pomůže automaticky zrušit všechny objekty, které jsou závislé na spouštěči.

Pokud použijete volbu RESTRICT, nebude aktivační událost odstraněna, pokud na ní budou objekty záviset.

Například:

Chcete-li odstranit spouštěč s názvem example_trigger v tabulce Price, spustíme následující příkaz:

Chcete-li zrušit spouštěč s názvem example_trigger v tabulce Společnost, spusťte následující příkaz:

DROP TRIGGER example_trigger IF EXISTSON Company;

Pomocí pgAdmin

Nyní se podívejme, jak se všechny tři akce prováděly pomocí pgAdmin.

Vytváření spouštěčů

Chcete-li toho dosáhnout prostřednictvím pgAdmin, postupujte takto:

Krok 1) Přihlaste se ke svému účtu pgAdmin.

Krok 2)

  1. Na navigačním panelu vlevo klikněte na Databáze.
  2. Klikněte na ukázku.

Krok 3) Chcete-li vytvořit tabulku Price_Audits, zadejte editor dotazů:

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

Krok 4) Klikněte na tlačítko Provést.

Krok 5) Spusťte následující kód k definování funkce auditfunc:

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

Krok 6) Spuštěním následujícího kódu vytvořte spouštěč price_trigger:

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

Krok 7)

  1. Spuštěním následujícího příkazu vložíte nový záznam do tabulky cen:
    INSERT INTO PriceVALUES (3, 400)
  2. Spuštěním následujícího příkazu zkontrolujte, zda byl do tabulky Price_Audits vložen záznam:
    SELECT * FROM Price_Audits

    To by mělo vrátit následující:

Krok 8) Pojďme zkontrolovat obsah tabulky Price_Audits:

Spouštěče výpisů

Krok 1) Spuštěním následujícího příkazu zkontrolujte spouštěče ve vaší databázi:

SELECT tgname FROM pg_trigger

Tím se vrátí následující:

Spouštění spouštěčů

Chcete-li zrušit spouštěč s názvem example_trigger v tabulce Společnost, spusťte následující příkaz:

DROP TRIGGER example_trigger IF EXISTSON Company

Souhrn:

  • Spouštěč PostgreSQL odkazuje na funkci, která se spustí automaticky, když dojde k databázové události na databázovém objektu, jako je například tabulka.
  • Mezi příklady takových databázových událostí patří INSERT, UPDATE, DELETE atd.
  • Spouštěč existuje pouze během životnosti databázového objektu, pro který byl vytvořen.
  • Pokud je databázový objekt odstraněn, bude odstraněn také spouštěč.
  • Spouštěče PostgreSQL se vytvářejí pomocí příkazu CREATE TRIGGER.
  • Každá aktivační událost je spojena s funkcí uvádějící, co bude aktivační událost dělat, když bude vyvolána.

Stáhněte si databázi použitou v tomto výukovém programu

Zajímavé články...