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
.