PostgreSQL Wyzwalacze: utwórz, wylistuj i upuść z przykładem
W czym jest Trigger PostgreSQL?
A PostgreSQL Cyngiel to funkcja uruchamiana automatycznie w przypadku wystąpienia zdarzenia w bazie danych w obiekcie bazy danych. Na przykład stół. Przykłady zdarzeń w bazie danych, które mogą aktywować wyzwalacz, to INSERT, UPDATE, DELETE itp. Co więcej, gdy utworzysz wyzwalacz dla tabeli, wyzwalacz zostanie automatycznie usunięty po usunięciu tej tabeli.
Jak używany jest Trigger PostgreSQL?
Wyzwalacz może zostać oznaczony operatorem FOR EACH ROW podczas jego tworzenia. Taki wyzwalacz zostanie wywołany raz dla każdego wiersza zmodyfikowanego przez operację. Wyzwalacz może zostać również oznaczony 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.
Teraz, gdy mamy funkcję wyzwalacza, powinniśmy powiązać ją z naszą tabelą cen. Nadajemy wyzwalaczowi nazwę cena_wyzwalacz. Przed utworzeniem nowego rekordu automatycznie zostanie wywołana funkcja wyzwalacza w celu zarejestrowania zmian. 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);
Teraz, gdy wprowadziliśmy rekord do tabeli Cena, 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;
Spowoduje to zwrócenie następujących informacji:
Wyzwalacz zadziałał pomyślnie.
Wyzwalacz listy Postgres
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.
Wyzwalacz upuszczenia Postgres
Aby upuścić A 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 w tabeli Price, uruchamiamy następujące polecenie:
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 wszystkie trzy akcje zostały wykonane przy użyciu pgAdmin.
Jak utworzyć wyzwalacz w PostgreSQL za pomocą pgAdmina
Oto jak możesz utworzyć wyzwalacz w Postgres przy użyciu pgAdmin:
Krok 1) Zaloguj się na swoje konto pgAdmin
Otwórz pgAdmin i zaloguj się na swoje konto, używając swoich danych uwierzytelniających
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 kod 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 kod, aby 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:
Upuszczanie wyzwalaczy za pomocą pgAdmin
Aby usunąć wyzwalacz o nazwie example_trigger z tabeli Company, uruchom następujące polecenie:
DROP TRIGGER example_trigger IF EXISTS ON Company
Podsumowanie
- A PostgreSQL wyzwalacz odnosi się do funkcji, która jest wyzwalana automatycznie, gdy zdarzenie w bazie danych wystąpi w obiekcie bazy danych, takim jak tabela.
- Przykładami takich zdarzeń w bazie danych są 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.
- PostgreSQL wyzwalacze są tworzone przy użyciu 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