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:

PostgreSQL Utwórz wyzwalacz

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:

PostgreSQL Utwórz wyzwalacz

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:

Wyzwalacz listy Postgres

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

  1. Na pasku nawigacyjnym po lewej stronie kliknij opcję Bazy danych.
  2. Kliknij opcję Demo.

Utwórz wyzwalacz w PostgreSQL za pomocą pgAdmina

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

Utwórz wyzwalacz w PostgreSQL za pomocą pgAdmina

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

  1. Uruchom następujące polecenie, aby wstawić nowy rekord do tabeli cen:
    INSERT INTO Price
    VALUES (3, 400)
  2. 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:

Utwórz wyzwalacz w PostgreSQL za pomocą pgAdmina

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:

Wyświetlanie wyzwalaczy za pomocą pgAdmin

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