PostgreSQL CREATE TRIGGER

Shrnutí: v tomto kurzu se naučíte používat příkaz CREATE TRIGGER pro vytvoření triggeru v PostgreSQL.

Pro vytvoření nového triggeru v PostgreSQL postupujte podle následujících kroků:

  • Nejprve vytvořte funkci triggeru pomocí příkazu CREATE FUNCTION.
  • Druhým krokem je svázání spouštěcí funkce s tabulkou pomocí příkazu CREATE TRIGGER.

Pokud nejste obeznámeni s vytvářením uživatelsky definovaných funkcí, můžete se podívat do sekce PL/pgSQL.

Syntaxe vytváření spouštěcí funkce

Spouštěcí funkce je podobná běžné uživatelsky definované funkci. Funkce trigger však nepřijímá žádné argumenty a má návratovou hodnotu typu trigger.

Následující obrázek ilustruje syntaxi vytváření funkce trigger:

Code language: SQL (Structured Query Language) (sql)

Upozorňujeme, že funkci trigger můžete vytvořit pomocí libovolného jazyka podporovaného PostgreSQL. V tomto návodu použijeme PL/pgSQL.

Funkce trigger získává údaje o svém volajícím prostředí prostřednictvím speciální struktury nazvané TriggerData, která obsahuje sadu lokálních proměnných.

Například OLD a NEW představují stavy řádků v tabulce před nebo po spouštěcí události.

PostgreSQL poskytuje také další lokální proměnné, kterým předchází TG_, například TG_WHEN a TG_TABLE_NAME.

Po definování spouštěcí funkce ji můžete svázat s jednou nebo více spouštěcími událostmi, například INSERT, UPDATE a DELETE.

Úvod do příkazu PostgreSQL CREATE TRIGGER

Příkaz CREATE TRIGGER vytvoří nový spouštěč. Následující obrázek ilustruje základní syntaxi příkazu CREATE TRIGGER:

Code language: SQL (Structured Query Language) (sql)

V této syntaxi:

Nejprve zadejte název spouštěče za klíčová slova TRIGGER.

Druhé zadejte časování, které způsobí spuštění spouštěče. Může to být BEFORE nebo AFTER nastane událost.

Zatřetí zadejte událost, která spouštěč vyvolá. Událost může být INSERT , DELETE, UPDATE nebo TRUNCATE.

Čtvrtý, zadejte název tabulky spojené se spouštěčem za klíčovým slovem ON.

Pátý, zadejte typ spouštěče, kterým může být:

  • spouštěč na úrovni řádků, který je specifikován klauzulí FOR EACH ROW.
  • spouštěč na úrovni položek, který je specifikován klauzulí FOR EACH STATEMENT.

Spouštěč na úrovni řádku se spouští pro každý řádek, zatímco spouštěč na úrovni příkazu se spouští pro každou transakci.

Předpokládejme, že tabulka má 100 řádků a dva spouštěče, které se spustí, když nastane událost DELETE.

Pokud příkaz DELETE smaže 100 řádků, spouštěč na úrovni řádku se spustí 100krát, jednou pro každý smazaný řádek. Naproti tomu spouštěč na úrovni příkazu bude spuštěn jednou bez ohledu na to, kolik řádků bude smazáno.

Nakonec za klíčovými slovy EXECUTE PROCEDURE zadejte název spouštěcí funkce.

Příklad příkazu CREATE TRIGGER v databázi PostgreSQL

Následující příkaz vytvoří novou tabulku s názvem employees:

Code language: SQL (Structured Query Language) (sql)

Předpokládejte, že při změně jména zaměstnance chcete změny zaznamenat do samostatné tabulky s názvem employee_audits :

Code language: SQL (Structured Query Language) (sql)

Nejprve vytvořte novou funkci s názvem log_last_name_changes:

Code language: SQL (Structured Query Language) (sql)

Funkce vloží staré příjmení do tabulky employee_audits včetně ID zaměstnance, příjmení a času změny, pokud se příjmení zaměstnance změní.

Příkaz OLD představuje řádek před aktualizací, zatímco NEW představuje nový řádek, který bude aktualizován. Znak OLD.last_name vrací příjmení před aktualizací a znak NEW.last_name vrací nové příjmení.

Druhý způsob je svázat spouštěcí funkci s tabulkou employees. Název spouštěče je last_name_changes. Před aktualizací hodnoty sloupce last_name se automaticky vyvolá spouštěcí funkce, která zaznamená změny.

Code language: SQL (Structured Query Language) (sql)

Zatřetí vložte do tabulky employees několik řádků:

Code language: SQL (Structured Query Language) (sql)

Za čtvrté prozkoumejte obsah tabulky employees:

Code language: SQL (Structured Query Language) (sql)

Předpokládejte, že Lily Bush změní své příjmení na Lily Brown.

Zapáté aktualizujte příjmení Lily na nové:

Code language: SQL (Structured Query Language) (sql)

Za sedmé zkontrolujte, zda bylo aktualizováno příjmení Lily:

Code language: SQL (Structured Query Language) (sql)

Jak vidíte z výstupu, příjmení Lily bylo aktualizováno.

Za osmé, ověřte obsah tabulky employee_audits:

Code language: SQL (Structured Query Language) (sql)

Změna byla v tabulce employee_audits zaznamenána spouštěčem.

V tomto návodu jste se dozvěděli, jak pomocí PostgreSQL CREATE TRIGGER vytvořit nový spouštěč.

  • Byl tento návod užitečný?
  • AnoNe

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.