Co to są wyzwalacze Postgresql?
Wyzwalacz PostgreSQL to funkcja, która jest wyzwalana automatycznie, gdy w obiekcie bazy danych wystąpi zdarzenie bazy danych. Na przykład stół.
Przykłady zdarzeń bazy danych, które mogą aktywować wyzwalacz, obejmują INSERT, UPDATE, DELETE itp. Ponadto, podczas tworzenia wyzwalacza dla tabeli, wyzwalacz zostanie automatycznie usunięty po usunięciu tej tabeli.
W tym samouczku PostgreSQL nauczysz się następujących rzeczy:
- Co to są wyzwalacze Postgresql?
- Jak wyzwalacz używany w POSRGREQL?
- Tworzenie wyzwalacza
- Korzystanie z pgAdmin
- Upuszczanie wyzwalaczy
Jak wyzwalacz używany w POSRGREQL?
Wyzwalacz można oznaczyć operatorem FOR EACH ROW podczas jego tworzenia. Taki wyzwalacz zostanie wywołany raz dla każdego wiersza zmodyfikowanego 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.
Tworzenie wyzwalacza
Aby utworzyć wyzwalacz, używamy funkcji CREATE TRIGGER. Oto składnia funkcji:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-nameON table-name[-- Trigger logic];
Nazwa wyzwalacza to nazwa wyzwalacza.
Słowa kluczowe BEFORE, AFTER i INSTEAD OF określają, kiedy wyzwalacz zostanie wywołany.
Nazwa zdarzenia to nazwa zdarzenia, które spowoduje wywołanie wyzwalacza. Może to być WSTAW, AKTUALIZUJ, USUŃ itp.
Nazwa tabeli to nazwa tabeli, dla której ma zostać utworzony wyzwalacz.
Jeśli wyzwalacz ma zostać utworzony dla operacji INSERT, musimy dodać parametr ON column-name.
Świadczy o tym następująca składnia:
CREATE TRIGGER trigger-name AFTER INSERT ON column-nameON table-name[-- Trigger logic];
Na przykład:
Skorzystamy z poniższej tabeli cen:
Cena £:
Stwórzmy kolejną tabelę Price_Audits, w której będziemy rejestrować zmiany wprowadzone w Tabeli cen:
CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL);
Możemy teraz zdefiniować nową funkcję o nazwie auditfunc:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$BEGININSERT 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 nowy identyfikator wiersza i godzinę utworzenia rekordu.
Teraz, gdy mamy funkcję wyzwalacza, powinniśmy powiązać ją z naszą tabelą cen. Nadamy wyzwalaczowi nazwę price_trigger. Przed utworzeniem nowego rekordu funkcja wyzwalacza zostanie wywołana automatycznie w celu zarejestrowania zmian. Oto wyzwalacz:
CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc();
Wstawmy nowy rekord do tabeli cen:
INSERT INTO PriceVALUES (3, 400);
Teraz, gdy wstawiliśmy rekord do tabeli Price, należy również wstawić rekord do tabeli Price_Audit. Będzie to wynikiem wyzwalacza, który utworzyliśmy w tabeli cen. Sprawdźmy to:
SELECT * FROM Price_Audits;
Zwróci to:
Wyzwalacz zadziałał pomyślnie.
Wyzwalacze aukcji
Wszystkie wyzwalacze utworzone w PostgreSQL są przechowywane w tabeli pg_trigger. Aby zobaczyć listę wyzwalaczy, które masz w bazie danych, wykonaj zapytanie w tabeli, uruchamiając polecenie SELECT, jak pokazano poniżej:
SELECT tgname FROM pg_trigger;
Zwraca to:
Kolumna tgname tabeli pg_trigger oznacza nazwę wyzwalacza.
Upuszczanie wyzwalaczy
Aby usunąć wyzwalacz PostgreSQL, używamy instrukcji DROP TRIGGER z następującą składnią:
DROP TRIGGER [IF EXISTS] trigger-nameON table-name [ CASCADE | RESTRICT ];
Parametr nazwa-wyzwalacza oznacza 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ąć wyzwalacz, który nie istnieje, bez użycia klauzuli IF EXISTS, pojawi się błąd.
Opcja KASKADA pomoże Ci automatycznie upuścić wszystkie obiekty zależne od wyzwalacza.
Jeśli użyjesz opcji RESTRICT, wyzwalacz nie zostanie usunięty, jeśli obiekty są od niego zależne.
Na przykład:
Aby usunąć wyzwalacz o nazwie example_trigger w tabeli Price, uruchamiamy następujące polecenie:
Aby usunąć wyzwalacz o nazwie example_trigger na tabeli Company, uruchom następujące polecenie:
DROP TRIGGER example_trigger IF EXISTSON Company;
Korzystanie z pgAdmin
Zobaczmy teraz, jak wszystkie trzy akcje zostały wykonane przy użyciu pgAdmin.
Tworzenie wyzwalaczy
Aby osiągnąć to samo za pomocą pgAdmin, wykonaj następujące czynności:
Krok 1) Zaloguj się do swojego konta pgAdmin.
Krok 2)
- Z paska nawigacji po lewej stronie kliknij Bazy danych.
- Kliknij opcję Demo.
Krok 3) Aby utworzyć tabelę Price_Audits, wpisz edytor zapytań:
CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL)
Krok 4) Kliknij przycisk Wykonaj.
Krok 5) Uruchom następujący kod, aby zdefiniować funkcję auditfunc:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$BEGININSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);RETURN NEW;END;$my_table$ LANGUAGE plpgsql
Krok 6) Uruchom następujący kod, aby utworzyć regułę price_trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc()
Krok 7)
- Uruchom następujące polecenie, aby wstawić nowy rekord do tabeli cen:
INSERT INTO PriceVALUES (3, 400)
- Uruchom następujące polecenie, aby sprawdzić, czy rekord został wstawiony do tabeli Price_Audits:
SELECT * FROM Price_Audits
Powinno to zwrócić następujące informacje:
Krok 8) Sprawdźmy zawartość tabeli Price_Audits:
Wyzwalacze aukcji
Krok 1) Uruchom następujące polecenie, aby sprawdzić wyzwalacze w bazie danych:
SELECT tgname FROM pg_trigger
Zwraca to:
Upuszczanie wyzwalaczy
Aby usunąć wyzwalacz o nazwie example_trigger na tabeli Company, uruchom następujące polecenie:
DROP TRIGGER example_trigger IF EXISTSON Company
Podsumowanie:
- Wyzwalacz PostgreSQL odnosi się do funkcji, która jest wyzwalana automatycznie, gdy zdarzenie bazy danych wystąpi w obiekcie bazy danych, takim jak tabela.
- Przykłady takich zdarzeń w bazie danych obejmują INSERT, UPDATE, DELETE itp.
- Wyzwalacz istnieje tylko w okresie istnienia obiektu bazy danych, dla którego został utworzony.
- Jeśli obiekt bazy danych zostanie usunięty, wyzwalacz również zostanie usunięty.
- Wyzwalacze PostgreSQL są tworzone za pomocą instrukcji CREATE TRIGGER.
- Każdy wyzwalacz jest powiązany z funkcją określającą, co zrobi wyzwalacz po wywołaniu.
Pobierz bazę danych używaną w tym samouczku