PostgreSQL Wyzwalacze: utwórz, wylistuj i upuść z przykładem
⚡ Inteligentne podsumowanie
PostgreSQL Wyzwalacze to funkcje uruchamiane automatycznie po wystąpieniu zdarzenia INSERT, UPDATE lub DELETE w tabeli. Dzięki nim baza danych może egzekwować reguły, rejestrować zmiany i weryfikować dane bez konieczności pisania dodatkowego kodu aplikacji.

W czym jest Trigger PostgreSQL?
A PostgreSQL Cyngiel to funkcja, która jest uruchamiana automatycznie, gdy wystąpi zdarzenie bazy danych w obiekcie bazy danych, na przykład w tabeli. Przykładami zdarzeń bazy danych, które mogą aktywować wyzwalacz, są INSERT, UPDATE, DELETE itp. Ponadto, po utworzeniu wyzwalacza dla tabeli, wyzwalacz zostanie automatycznie usunięty po jej usunięciu.
Jak używany jest Trigger PostgreSQL?
Wyzwalacz można oznaczyć operatorem FOR EACH ROW podczas jego tworzenia. Taki wyzwalacz będzie wywoływany jednokrotnie dla każdego wiersza modyfikowanego przez operację. Wyzwalacz można również oznaczyć operatorem FOR EACH STATEMENT podczas jego tworzenia. Ten wyzwalacz zostanie wykonany tylko raz dla określonej operacji.
PostgreSQL Utwórz wyzwalacz
Aby utworzyć wyzwalacz, używamy funkcji CREATE TRIGGER. Oto składnia funkcji:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name ON table-name [ -- Trigger logic ];
Nazwa wyzwalacza to nazwa wyzwalacza.
PRZED, PO i INSTEAD OF to słowa kluczowe określające, kiedy zostanie wywołany wyzwalacz.
Nazwa-zdarzenia to nazwa zdarzenia, które spowoduje wywołanie wyzwalacza. To może być INSERT, AKTUALIZUJ, USUŃ itp.
Nazwa-tabeli to nazwa tabeli, na której ma zostać utworzony wyzwalacz.
Jeśli wyzwalacz ma zostać utworzony dla operacji INSERT, musimy dodać parametr ON column-name.
Poniższa składnia to demonstruje:
CREATE TRIGGER trigger-name AFTER INSERT ON column-name ON table-name [ -- Trigger logic ];
PostgreSQL Utwórz przykład wyzwalacza
Będziemy korzystać z tabeli cen podanej poniżej:
Cena:
Stwórzmy kolejną tabelę Price_Audits, w której będziemy rejestrować zmiany wprowadzone w tabeli Cena:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL );
Możemy teraz zdefiniować nową funkcję o nazwie audytfunc:
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;
Powyższa funkcja wstawi rekord do tabeli Price_Audits zawierający identyfikator nowego wiersza i godzinę utworzenia rekordu.
Skoro mamy już funkcję wyzwalacza, powinniśmy powiązać ją z tabelą cen. Nazwiemy wyzwalacz price_trigger. Przed utworzeniem nowego rekordu funkcja wyzwalacza zostanie wywołana automatycznie, aby zarejestrować zmiany. Oto wyzwalacz:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc();
Wstawmy nowy rekord do tabeli Cen:
INSERT INTO Price VALUES (3, 400);
Skoro wstawiliśmy rekord do tabeli „Cena”, rekord powinien również zostać wstawiony do tabeli „Price_Audits” ze względu na utworzony przez nas wyzwalacz. Sprawdźmy to:
SELECT * FROM Price_Audits;
Spowoduje to zwrócenie następujących informacji:
Wyzwalacz zadziałał pomyślnie.
PostgreSQL Lista wyzwalaczy
Wszystkie wyzwalacze, które tworzysz w PostgreSQL są przechowywane w tabeli pg_trigger. Aby zobaczyć listę wyzwalaczy, które masz na baza danych, wykonaj zapytanie do tabeli, uruchamiając polecenie SELECT, jak pokazano poniżej:
SELECT tgname FROM pg_trigger;
To zwraca następujące informacje:
Kolumna tgname tabeli pg_trigger oznacza nazwę wyzwalacza.
PostgreSQL Upuść spust
Gdy wyzwalacz nie jest już potrzebny, można go równie łatwo usunąć. Aby usunąć PostgreSQL wyzwalacza używamy instrukcji DROP TRIGGER o następującej składni:
DROP TRIGGER [IF EXISTS] trigger-name
ON table-name [ CASCADE | RESTRICT ];
Parametr nazwa-wyzwalacza określa nazwę wyzwalacza, który ma zostać usunięty.
Nazwa-tabeli oznacza nazwę tabeli, z której ma zostać usunięty wyzwalacz.
Klauzula IF EXISTS próbuje usunąć istniejący wyzwalacz. Jeśli spróbujesz usunąć nieistniejący wyzwalacz bez użycia klauzuli IF EXISTS, pojawi się błąd.
Opcja CASCADE pomoże Ci automatycznie upuścić wszystkie obiekty zależne od wyzwalacza.
Jeśli użyjesz opcji OGRANICZ, wyzwalacz nie zostanie usunięty, jeśli obiekty są od niego zależne.
Na przykład:
Aby usunąć wyzwalacz o nazwie example_trigger z tabeli Company, uruchom następujące polecenie:
DROP TRIGGER example_trigger IF EXISTS
ON Company;
Korzystanie z pgAdmina
Zobaczmy teraz, jak wykonać wszystkie trzy czynności za pomocą pgAdmin.
Jak utworzyć wyzwalacz w PostgreSQL za pomocą pgAdmina
Oto jak możesz utworzyć wyzwalacz w PostgreSQL używając pgAdmina:
Krok 1) Zaloguj się na swoje konto pgAdmin
Otwórz pgAdmin i zaloguj się na swoje konto, używając swoich danych logowania.
Krok 2) Utwórz bazę danych demonstracyjnych
- Na pasku nawigacyjnym po lewej stronie kliknij opcję Bazy danych.
- Kliknij opcję Demo.
Krok 3) Wpisz zapytanie
Aby utworzyć tabelę Price_Audits, wpisz zapytanie w edytorze:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL )
Krok 4) Wykonaj zapytanie
Kliknij przycisk Wykonaj.
Krok 5) Uruchom Code dla funkcji audytu
Uruchom poniższy kod, aby zdefiniować funkcję 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) Uruchom Code utworzyć wyzwalacz
Uruchom poniższy kod, aby utworzyć wyzwalacz price_trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc()
Krok 7) Wstaw nowy rekord
- Uruchom następujące polecenie, aby wstawić nowy rekord do tabeli cen:
INSERT INTO Price VALUES (3, 400)
- Uruchom następujące polecenie, aby sprawdzić, czy rekord został wstawiony do tabeli Price_Audits:
SELECT * FROM Price_Audits
To powinno zwrócić następujące informacje:
Krok 8) Sprawdź zawartość tabeli
Sprawdźmy zawartość tabeli Price_Audits.
Wyświetlanie wyzwalaczy za pomocą pgAdmin
Krok 1) Uruchom następujące polecenie, aby sprawdzić wyzwalacze w swojej bazie danych:
SELECT tgname FROM pg_trigger
To zwraca następujące informacje:
Spadekping Wyzwalacze używające pgAdmin
Aby usunąć wyzwalacz o nazwie example_trigger z tabeli Company, uruchom następujące polecenie:
DROP TRIGGER example_trigger IF EXISTS
ON Company
Pobierz bazę danych używaną w tym samouczku







