PostgreSQL Triggers: Create, List & Drop with Example

V čem je Trigger in PostgreSQL?

A PostgreSQL spoušť je funkce, která se spouští automaticky, když na databázovém objektu dojde k databázové události. Například stůl. Příklady databázových událostí, které mohou aktivovat spouštěč, zahrnují INSERT, UPDATE, DELETE atd. Navíc, když vytvoříte spouštěč pro tabulku, bude spouštěč automaticky zrušen, když je tato tabulka odstraněna.

Jak se Trigger používá v PostgreSQL?

Spouštěč lze označit operátorem FOR EACH ROW při jeho vytváření. Takový trigger bude volán jednou pro každý řádek upravený operací. Spouštěč lze také označit operátorem FOR EACH STATEMENT při jeho vytváření. Tento trigger bude proveden pouze jednou pro konkrétní operaci.

PostgreSQL Vytvoření spouštěče

Pro vytvoření triggeru použijeme funkci CREATE TRIGGER. Zde je syntaxe funkce:

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

Trigger-name je název triggeru.

Klíčová slova BEFORE, AFTER a MÍSTO jsou klíčová slova, která určují, kdy bude spouštěč vyvolán.

Název-události je název události, která způsobí vyvolání spouštěče. To může 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 trigger vytvořen pro operaci INSERT, musíme přidat parametr ON column-name.

Demonstruje to následující syntaxe:

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

PostgreSQL Vytvořit příklad spouštění

Použijeme níže uvedenou cenovou tabulku:

Cena:

PostgreSQL Vytvoření spouštěče

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$
   BEGIN
      INSERT 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 bude automaticky vyvolána spouštěcí funkce pro zaznamenání změn. Zde je spouštěč:

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

Vložíme nový záznam do cenové tabulky:

INSERT INTO Price 
VALUES (3, 400);

Nyní, když jsme vložili záznam do tabulky Cena, měl by být záznam vložen také do tabulky Price_Audit. Bude to důsledkem spouštěče, který jsme vytvořili v tabulce cen. Zkontrolujeme toto:

SELECT * FROM Price_Audits;

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

PostgreSQL Vytvoření spouštěče

Spoušť fungovala úspěšně.

Spouštěč seznamu Postgres

Všechny spouštěče, které vytvoříte PostgreSQL jsou uloženy v tabulce pg_trigger. Chcete-li zobrazit seznam spouštěčů, které máte na databáze, dotazujte se na tabulku spuštěním příkazu SELECT, jak je uvedeno níže:

SELECT tgname FROM pg_trigger;

To vrátí následující:

Spouštěč seznamu Postgres

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

Postgres Drop Trigger

Upustit a PostgreSQL trigger, používáme příkaz DROP TRIGGER s následující syntaxí:

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

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

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

Klauzule IF EXISTS se pokusí odstranit spouštěč, který existuje. Pokud se pokusíte odstranit spouštěč, který neexistuje bez použití klauzule IF EXISTS, zobrazí se chyba.

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

Pokud použijete možnost RESTRICT, spouštěč nebude odstraněn, pokud jsou na něm objekty závislé.

Pro příklad:

Chcete-li odstranit spouštěč s názvem example_trigger v tabulce Cena, 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 EXISTS
ON Company;

Pomocí pgAdmin

Nyní se podívejme, jak byly provedeny všechny tři akce pomocí pgAdmin.

Jak vytvořit spouštěč v PostgreSQL pomocí pgAdmin

Zde je návod, jak můžete vytvořit spouštěč v Postgres pomocí pgAdmin:

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

Otevřete pgAdmin a přihlaste se ke svému účtu pomocí svých přihlašovacích údajů

Krok 2) Vytvořte demo databázi

  1. Na navigační liště vlevo klikněte na Databáze.
  2. Klepněte na tlačítko Demo.

Vytvořit spouštěč v PostgreSQL pomocí pgAdmin

Krok 3) Zadejte dotaz

Chcete-li vytvořit tabulku Price_Audits, zadejte dotaz v editoru:

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

Krok 4) Proveďte dotaz

Klepněte na tlačítko Spustit

Vytvořit spouštěč v PostgreSQL pomocí pgAdmin

Krok 5) Spusťte kód pro auditfunc

Spuštěním následujícího kódu definujte funkci auditfunc:

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

Krok 6) Spusťte kód pro vytvoření spouštěče

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

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

Krok 7) Vložte nový záznam

  1. Spusťte následující příkaz pro vložení nového záznamu do cenové tabulky:
    INSERT INTO Price
    VALUES (3, 400)
  2. Spuštěním následujícího příkazu zkontrolujte, zda byl záznam vložen do tabulky Price_Audits:
    SELECT * FROM Price_Audits

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

Vytvořit spouštěč v PostgreSQL pomocí pgAdmin

Krok 8) Zkontrolujte obsah tabulky

Zkontrolujeme obsah tabulky Price_Audits:

Výpis spouštěčů pomocí pgAdmin

Krok 1) Chcete-li zkontrolovat spouštěče ve vaší databázi, spusťte následující příkaz:

SELECT tgname FROM pg_trigger

To vrátí následující:

Výpis spouštěčů pomocí pgAdmin

Zahození spouštěčů pomocí pgAdmin

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 EXISTS
ON Company

Shrnutí

  • A PostgreSQL trigger odkazuje na funkci, která se spouští automaticky, když na databázovém objektu, jako je tabulka, dojde k databázové události.
  • Příklady takových databázových událostí zahrnují INSERT, UPDATE, DELETE atd.
  • Spouštěč existuje pouze po dobu životnosti databázového objektu, pro který byl vytvořen.
  • Pokud je databázový objekt odstraněn, bude smazán také spouštěč.
  • PostgreSQL spouštěče se vytvářejí pomocí příkazu CREATE TRIGGER.
  • Každý spouštěč je spojen s funkcí, která uvádí, co spouštěč udělá, když je vyvolán.

Stáhněte si databázi použitou v tomto kurzu