PostgreSQL Triggers: Create, List & Drop with Example
⚡ Chytré shrnutí
PostgreSQL Triggery jsou funkce, které se spouštějí automaticky, když se u tabulky spustí událost INSERT, UPDATE nebo DELETE, což umožňuje databázi vynucovat pravidla, protokolovat změny a auditovat data bez nutnosti dalšího aplikačního kódu.
V čem je Trigger in PostgreSQL?
A PostgreSQL spoušť je funkce, která se spustí automaticky, když dojde k události v databázi na databázovém objektu, například v tabulce. Mezi příklady databázových událostí, které mohou aktivovat spouštěč, patří INSERT, UPDATE, DELETE atd. Navíc, když vytvoříte spouštěč pro tabulku, spouštěč se automaticky zruší, když je tato tabulka smazána.
Jak se Trigger používá v PostgreSQL?
Spouštěč lze během jeho vytváření označit operátorem FOR EACH ROW. Takový spouštěč bude volán jednou pro každý řádek upravený operací. Spouštěč lze také během jeho vytváření označit operátorem FOR EACH STATEMENT. Tento spouštěč 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:
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 navázat na naši tabulku Price. Spouštěči dáme název price_trigger. Před vytvořením nového záznamu se spouštěcí funkce automaticky vyvolá, aby zaznamenala změny. 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 Price, měl by být záznam vložen také do tabulky Price_Audits kvůli námi vytvořenému triggeru. Zkontrolujme to:
SELECT * FROM Price_Audits;
Tím se vrátí následující:
Spoušť fungovala úspěšně.
PostgreSQL Seznam spouštěčů
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í:
Sloupec tgname tabulky pg_trigger označuje název spouštěče.
PostgreSQL Spuštění spouště
Když již spouštěč nepotřebujete, můžete ho stejně snadno odstranit. Chcete-li spustit 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 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 se všechny tři akce provádějí pomocí pgAdmin.
Jak vytvořit spouštěč v PostgreSQL pomocí pgAdmin
Zde je návod, jak si můžete vytvořit spouštěč v PostgreSQL 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
- Na navigační liště vlevo klikněte na Databáze.
- Klepněte na tlačítko Demo.
Krok 3) Zadejte dotaz
Chcete-li vytvořit tabulku Price_Audits, zadejte do editoru dotaz:
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.
Krok 5) Spusťte Code pro auditní funkci
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 Code vytvořit spouštěč
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
- Spusťte následující příkaz pro vložení nového záznamu do cenové tabulky:
INSERT INTO Price VALUES (3, 400)
- 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í:
Krok 8) Zkontrolujte obsah tabulky
Podívejme se na 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í:
Poklesping Triggery 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
Stáhněte si databázi použitou v tomto kurzu








