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.

  • ⚡ Definice: Trigger je funkce, která se automaticky vyvolává při události v databázi, jako je INSERT, UPDATE nebo DELETE.
  • 🔁 Rozsah: Příkaz FOR EACH ROW spustí trigger jednou pro každý dotčený řádek, zatímco příkaz FOR EACH STATEMENT jej spustí jednou za operaci.
  • 🛠️ Vytvořit: Funkce CREATE TRIGGER naváže funkci na tabulku a nastaví časování BEFORE, AFTER nebo INSTEAD OF.
  • ???? Seznam: Dotazujte katalog pg_trigger pomocí příkazu SELECT tgname, abyste viděli všechny triggery v databázi.
  • 🗑️ Drop: DROP TRIGGER odstraní spouštěč a IF EXISTS zabrání chybě, pokud chybí.
  • 🤖 Nápověda s umělou inteligencí: Asistenti s umělou inteligencí generují spouštěcí funkce a na základě požadavku v jednoduchém jazyce navrhují časování PŘED nebo PO.

PostgreSQL Triggery

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:

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

PostgreSQL Vytvoření spouštěče

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

PostgreSQL Seznam spouštěčů

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

  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 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.

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

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

  1. Spusťte následující příkaz pro vložení nového záznamu do cenové tabulky:
INSERT INTO Price
VALUES (3, 400)
  1. 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

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

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

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

Nejčastější dotazy

Spouštěč BEFORE se spustí před zapsáním změny řádku, takže může řádek upravit nebo odmítnout. Spouštěč AFTER se spustí po uložení změny, což je vhodné pro úlohy protokolování a auditu.

Trigger INSTEAD OF je definován na pohledu, nikoli na tabulce. Nahrazuje INSERT, UPDATE nebo DELETE vlastní logikou, takže pohled určený pouze pro čtení je zapisovatelný.

Spouštěcí funkce se obvykle píší v PL/pgSQL. PostgreSQL také podporuje PL/Python, PL/Perl, PL/Tcl a C, takže si můžete vybrat jazyk, který odpovídá vaší logice.

Pro vypnutí použijte příkaz ALTER TABLE název_tabulky DISABLE TRIGGER název_triggeru a pro opětovné zapnutí použijte příkaz ENABLE TRIGGER. Tím se zabrání ztrátě.ping a znovuvytvoření spouštěče během hromadného načítání.

Ano. Každý trigger přidává práci ke každému dotčenému řádku nebo příkazu, takže náročná logika triggerů může zpomalit zápis. Udržujte triggerové funkce krátké a indexujte všechny sloupce, na které se dotazují.

Ano. Pokud trigger změní jinou tabulku, která má také triggery, spustí se i ty a vytvoří se kaskádové triggery. PostgreSQL omezuje hloubku vnoření, aby se zabránilo nekonečným smyčkám.

Asistenti kódování s umělou inteligencí přemění požadavek v jednoduchém jazyce na kompletní příkaz CREATE TRIGGER a spouštěcí funkci, navrhnou časování BEFORE nebo AFTER a vysvětlí vygenerovaný PL/pgSQL pro rychlý přehled.

Ano. Nástroje jako pgai a asistenti založené na GPT překládají popsané pravidlo do spouštěcího SQL a dokáží vytvářet spouštěče INSERT, které automaticky označují nebo ověřují nová data, jakmile dorazí.

Shrňte tento příspěvek takto: