PostgreSQL CREATE TRIGGER

Podsumowanie: W tym poradniku dowiesz się, jak używać instrukcji PostgreSQL CREATE TRIGGER do tworzenia trigerów.

Aby utworzyć nowy triger w PostgreSQL, wykonaj następujące czynności:

  • Po pierwsze, utwórz funkcję trigera za pomocą instrukcji CREATE FUNCTION.
  • Po drugie, powiąż funkcję trigera z tabelą za pomocą instrukcji CREATE TRIGGER.

Jeśli nie wiesz jak tworzyć funkcje zdefiniowane przez użytkownika, zapoznaj się z sekcją PL/pgSQL.

Składnia funkcji trigera

Funkcja trigera jest podobna do zwykłej funkcji zdefiniowanej przez użytkownika. Jednakże funkcja triggera nie przyjmuje żadnych argumentów i posiada wartość zwracaną typu trigger.

Poniżej przedstawiono składnię tworzenia funkcji triggera:

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

Pamiętaj, że możesz tworzyć funkcje triggera używając dowolnego języka obsługiwanego przez PostgreSQL. W tym poradniku użyjemy PL/pgSQL.

Funkcja trigera otrzymuje dane o swoim środowisku wywołania poprzez specjalną strukturę TriggerData, która zawiera zestaw zmiennych lokalnych.

Na przykład OLD oraz NEW reprezentują stan wiersza w tabeli przed lub po zdarzeniu wywołującym.

PostgreSQL udostępnia również inne zmienne lokalne poprzedzone TG_, takie jak TG_WHEN oraz TG_TABLE_NAME.

Po zdefiniowaniu funkcji trigera możesz powiązać ją z jednym lub wieloma zdarzeniami trigera, takimi jak INSERT, UPDATE oraz DELETE.

Wprowadzenie do PostgreSQL CREATE TRIGGER

Zdanie CREATE TRIGGER tworzy nowy triger. Poniżej przedstawiono podstawową składnię instrukcji CREATE TRIGGER:

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

W tej składni:

Po pierwsze, określ nazwę trigera po słowach kluczowych TRIGGER.

Po drugie, określ moment wywołania trigera. Może to być BEFORE lub AFTER zdarzenie.

Po trzecie, określ zdarzenie, które wywołuje triger. Zdarzenie może mieć postać INSERT , DELETE, UPDATE lub TRUNCATE.

Po czwarte, określ nazwę tabeli powiązanej z trigerem po słowie kluczowym ON.

Po piąte, określ typ trigera, którym może być:

  • Triger poziomu wiersza określony przez klauzulę FOR EACH ROW.
  • Triger poziomu pakietu określony przez klauzulę FOR EACH STATEMENT.

Triger wierszowy jest wywoływany dla każdego wiersza, podczas gdy triger zestawieniowy jest wywoływany dla każdej transakcji.

Załóżmy, że tabela ma 100 wierszy i dwa trigery, które zostaną wywołane, gdy wystąpi zdarzenie DELETE.

Jeśli instrukcja DELETE usunie 100 wierszy, triger wierszowy zostanie wywołany 100 razy, raz dla każdego usuniętego wiersza. Z drugiej strony, triger na poziomie instrukcji zostanie wywołany jeden raz, niezależnie od tego, ile wierszy zostanie usuniętych.

Na koniec określ nazwę funkcji trigera po słowach kluczowych EXECUTE PROCEDURE.

PostgreSQL CREATE TRIGGER przykład

Poniższe wyrażenie tworzy nową tabelę o nazwie employees:

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

Załóżmy, że gdy zmieni się nazwisko pracownika, chcesz rejestrować zmiany w osobnej tabeli o nazwie employee_audits :

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

Po pierwsze, utwórz nową funkcję o nazwie log_last_name_changes:

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

Funkcja ta wstawia stare nazwisko do tabeli employee_audits zawierającej identyfikator pracownika, nazwisko i czas zmiany, jeśli nazwisko pracownika ulegnie zmianie.

Wiersz OLD reprezentuje wiersz przed aktualizacją, a wiersz NEW reprezentuje nowy wiersz, który zostanie zaktualizowany. Wartość OLD.last_name zwraca nazwisko przed aktualizacją, a wartość NEW.last_name zwraca nowe nazwisko.

Po drugie, powiąż funkcję trigera z tabelą employees. Nazwa wyzwalacza to last_name_changes. Zanim wartość kolumny last_name zostanie zaktualizowana, funkcja wyzwalacza zostanie automatycznie wywołana w celu zarejestrowania zmian.

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

Po trzecie, wstaw kilka wierszy do tabeli employees:

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

Po czwarte, zbadaj zawartość tabeli employees:

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

Załóżmy, że Lily Bush zmieniła nazwisko na Lily Brown.

Po piąte, zaktualizuj nazwisko Lily do nowego:

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

Po siódme, sprawdź, czy nazwisko Lily zostało zaktualizowane:

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

Jak widać na wyjściu, nazwisko Lily zostało zaktualizowane.

Po ósme, sprawdź zawartość tabeli employee_audits:

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

Zmiana została zarejestrowana w tabeli employee_audits przez wyzwalacz.

W tym poradniku dowiedziałeś się, jak używać PostgreSQL CREATE TRIGGER do tworzenia nowego wyzwalacza.

  • Czy ten poradnik był pomocny ?
  • TakNie

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.