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:
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í:
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í:
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
- 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 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
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
- 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
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í:
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