Jak skonfigurować wyzwalacze PostgreSQL

Jak skonfigurować wyzwalacze PostgreSQL
„Spust jest używany w dowolnej bazie danych do wykonywania zautomatyzowanego zadania, gdy pojawi się określone zdarzenie bazy danych. Nazywa się to funkcją wywołania zwrotnego bazy danych, która jest nazywana automatycznie na podstawie zdarzenia. Istnieje wiele zalet korzystania z wyzwalaczy w bazie danych PostgreSQL. Można utworzyć trzy typy wyzwalaczy, które opisano w tym samouczku za pomocą wielu przykładów."

Niektóre korzyści z używania wyzwalaczy

  • Sprawdzanie poprawności danych można łatwo wykonać.
  • Można wygenerować unikalną wartość nowego rekordu.
  • Rozwój aplikacji staje się szybszy.
  • Można egzekwować zasady biznesowe aplikacji.
  • Utrzymanie aplikacji staje się łatwiejsze.

Składnia

Składnia tworzenia spustu jest podana poniżej.

Utwórz [lub zamień] [ograniczenie] Nazwa wyzwalania przed | Po | Zamiast event [lub…]
Na nazwie Stoli
[Z odwołania_table_name]
[Nie odroczenie | [Odroczenie] [początkowo natychmiastowe | Początkowo odroczony]]
[Odwołanie Old | Nowa tabela [jako] przejście_relation_name […]]
[Dla [każdego] wiersz | OŚWIADCZENIE ]
[Kiedy (warunek)]
Wykonaj funkcja | Procedura funkcja_nazwa (argumenty)
  • Utwórz słowo kluczowe służy do utworzenia nowego spustu, a do modyfikacji istniejącego spustu używane jest zastąpienie słowa kluczowego.
  • Opcja ograniczenia służy do utworzenia wyzwalacza ograniczenia, który jest wypalany na podstawie wartości ograniczenia.
  • Do tworzenia spustu używana jest unikalna nazwa spustu.
  • Do utworzenia spustu można użyć czterech rodzajów zdarzeń. Są to wstawianie, aktualizacja, usuwanie i ścięcie.
  • Trzy rodzaje wyzwalaczy, które można utworzyć ZANIM, PO, I ZAMIAST. Wyzwalacze można utworzyć dla tabeli, tabeli zagranicznej i widoku. ZANIM I PO wyzwalacze obsługują wkładkę, aktualizuj i usuń operacje dla tabeli i tabeli zagranicznych na poziomie wiersza, a także widok na poziomie instrukcji. ZAMIAST Wyzwalacz obsługuje wstawkę, aktualizację i usuwanie operacji dla widoku tylko na poziomie wiersza. Zdarzenie obcięcia można użyć do tabeli tylko na poziomie instrukcji.
  • Po zdefiniowaniu zdarzenia używana jest nazwa tabeli lub tabeli zagranicznej.
  • nazwa_table_table_name jest używany tylko do ograniczenia obcych i ograniczenia wyłącznie.
  • Domyślny czas spustu jest zdefiniowany przez Nie można odroczyć Lub Odroczony Lub Początkowo natychmiastowe Lub Początkowo odroczone.
  • Odwołanie Słowo kluczowe służy do deklarowania jednej lub dwóch nazw relacji.
  • Stary stół Lub Nowy TABKlauzula e definiuje relację przejścia przed obrazem lub relację przejścia po obrazie.
  • nazwa_relacji_relacji jest używany w ramach wyzwalacza dla relacji przejściowej.
  • Dla każdego wiersza Lub Dla każdego stwierdzenia Określa, czy funkcja wyzwalacza powinna zostać zwolniona raz dla każdego wiersza dotkniętego zdarzeniem wyzwalacza, czy tylko raz na instrukcję SQL. Dla każdego stwierdzenia jest domyślnie.
  • stan określa, czy funkcja wyzwalacza zostanie wykonana, czy nie.
  • funkcja_nazwa jest funkcją zdefiniowaną przez użytkownika, która nie wymaga argumentu, a typem zwrotu jest wyzwalacz, który jest wykonywany, gdy wyzwalacz.
  • Oddzielona przecinkami lista argumentów jest przekazywana do funkcji, gdy spust jest wykonywany.

Wymagania wstępne

A. Zainstaluj PostgreSQL

Musisz zainstalować najnowszą wersję pakietów PostgreSQL w systemie operacyjnym Linux przed wykonaniem instrukcji SQL pokazanych w tym samouczku. Uruchom następujące polecenia, aby zainstalować i uruchom PostgreSQL:

$ sudo apt-get -y instalacja Postgresql PostgreSQL-Contib
$ sudo systemctl start postgresql.praca

B. Uruchom następujące polecenie, aby zalogować się do PostgreSQL z uprawnieniami root.

$ sudo -u postgres psql

C. Możesz utworzyć bazę danych o nazwie „testdb ” Uruchamiając następującą instrukcję SQL.

# Utwórz bazę danych testDB;

Jeśli chcesz utworzyć tabelę w testdb baza danych, wtedy musisz wpisać "\C" Aby zmienić bazę danych. Ale w tym samouczku nie zmieniłem bazy danych, a tabela i wszystkie funkcje zostały utworzone w domyślnej bazie danych Postgres.

Utwórz tabelę o nazwie nauczyciele I kursy z niektórymi rekordami do przetestowania użycia wyzwalaczy, które zostaną utworzone później w tym samouczku.

Utwórz nauczycieli tabeli (
ID szeregowy klucz podstawowy,
Nazwa varchar (30),
Adres Varchar (100),
contact_no varchar (20),
Dostępny domyślnie BOOL);
Utwórz kursy stołowe (
Klucz podstawowy kursu_id,
Nazwa varchar (30),
Credit_hour Float,
Nauczyciela_id int default 0);
Wstaw do nauczycieli (nazwa, adres, kontakt_no, dostępny)
wartości
(„Nasir Uddin”, „Dhanmondi 15, Dhaka”, „+8801947854523”, false),
(„Farzana Mahmud”, '39/1, Jigatola, Dhaka ', „+8801853426754”, false);
Wstaw do kursów (nazwa, credit_hour, nauczyciel_id)
wartości
(„Fizyka”, 2.0, 1),
(„Chemia”, 2.0, 2),
(„Math”, 3.0, 1);

Przykłady wyzwalają

Każdy spust jest powiązany z funkcją PostgreSQL. Musisz więc utworzyć funkcję przed utworzeniem spustu. W tej części samouczka pokazano sposób tworzenia różnych rodzajów wyzwalaczy.

Przykład-1: Utwórz przed wstawieniem wyzwalacza

Przed wstawką wyzwala pożary przed wykonaniem jakiejkolwiek operacji wkładki. Uruchom następującą instrukcję SQL, aby utworzyć funkcję o nazwie przed_insert () które będą używane w Przed wstawką spust. Jednym z głównych celów korzystania z spustu jest sprawdzanie poprawności danych. Poniższa funkcja sprawdzi, czy poszczególne pola są puste, czy nie. Jeśli którekolwiek z wartości pola pozostanie puste, zostanie podniesiony konkretny komunikat o błędzie. Kolejna walidacja zostanie sprawdzona pod kątem nazwa pole, a komunikat o błędzie zostanie podniesiony, jeśli długość tego pola jest mniejsza niż 5. Następna instrukcja warunkowa służy do połączenia wartości ciągu „+88” z contact_no Jeśli długość contact_no pole jest 11.

Utwórz lub zastąp funkcję przed_insert ()
Zwraca wyzwalacz jako
$$
ZACZYNAĆ
Jeśli nowy.name = "lub nowy.adres = "lub nowy.contact_no = "wtedy
Nazwa podwyżki lub adres lub pole contact_no jest puste.';;
Zakończyć, jeśli;
Jeśli długość (nowy.nazwa) < 5 THEN
Pole nazwy podnoszenia musi zawierać więcej niż 5 znaków.';;
Zakończyć, jeśli;
Jeśli długość (nowy.contact_no) = 11 Następnie
NOWY.contact_no = '+88' || NOWY.contact_no;
Zakończyć, jeśli;
Zwrócić nowy;
KONIEC;
$$
Język „plpgsql”;

Następujące dane wyjściowe pojawi się, jeśli funkcja zostanie utworzona pomyślnie w Postgres Baza danych.

Uruchom następującą instrukcję SQL, aby utworzyć wyzwalacz nazwany Check_Before_insert które wykonają przed_insert () funkcja przed wstawieniem nowego rekordu do nauczyciele tabela.

Utwórz wyzwalacz check_before_insert
Przed wstawką
Na nauczyciele
Dla każdego wiersza
Wykonaj funkcję przed_insert ();

Pojawi się następujące dane wyjściowe, jeśli utworz się spust pomyślnie.

Uruchom następującą instrukcję Wstaw, która zawiera wszystkie prawidłowe dane.

Wstaw do nauczycieli (nazwa, adres, kontakt_no)
Wartości („Zafar Iqbal”, „Mirpur, Dhaka”, „01738975634”);

Następujące dane wyjściowe pojawią się, jeśli nowy rekord zostanie pomyślnie wstawiony.

Uruchom następującą instrukcję Wstaw, która zawiera nieprawidłowe dane dla pola nazwy.

Wstaw do nauczycieli (nazwa, adres, kontakt_no)
Wartości („Lina”, „Malibag, Dhaka”, „01790975630”);

Dla nieprawidłowej wartości nazwy pojawi się następujący komunikat o błędzie.

Uruchom następującą instrukcję wstawu, która zawiera pustą wartość dla adres I contact_no pola, a pusta wartość dla tych pól jest nieprawidłowa.

Wstaw do nauczycieli (nazwa, adres, kontakt_no)
Wartości („Nilufar Rahman”, „,”);

Dla pustych wartości pojawi się następujący komunikat o błędzie.

Uruchom następującą instrukcję SELECT, aby sprawdzić, które rekordy są wstawiane po użyciu spustu przed insert.

Wybierz * od nauczycieli;

Poniższe wyjście pokazuje, że tylko jeden rekord jest wstawiany po użyciu spustu.

Przykład-2: Utwórz po usunięciu wyzwalacza

Po usunięciu dowolnego rekordu z określonej tabeli. Uruchom następującą instrukcję SQL, aby utworzyć funkcję o nazwie after_delete () które będą używane w Po usunięciu wyzwala się usuwanie powiązanych wierszy z kursy Tabela, gdy rekord zostanie usunięty z nauczyciele' tabela. Tutaj stary.ID został użyty do śledzenia usuniętego ID z nauczyciele' tabela.

Utwórz funkcję after_delete ()
Zwraca wyzwalacz jako
$$
ZACZYNAĆ
Usuń z kursów, gdzie nauczyciel_d = stary.ID;
Powrót starego;
KONIEC;
$$
Język PLPGSQL;

Następujące dane wyjściowe pojawi się, jeśli funkcja zostanie utworzona pomyślnie w Postgres Baza danych.

Uruchom następującą instrukcję SQL, aby utworzyć wyzwalacz nazwany delete_teacher które wykonają after_delete () funkcja po usunięciu rekordu z nauczyciele' Tabela, która usunie rekordy z kursy stół, gdzie Nauczyciela_id Wartość pasuje do usuniętego ID wartość nauczyciele' tabela.

Utwórz wyzwalacz delete_teacher
Po usunięciu
Na nauczyciele
Dla każdego wiersza
Wykonaj funkcję after_delete ();

Pojawi się następujące dane wyjściowe, jeśli utworz się spust pomyślnie.

Uruchom następujące oświadczenie Usuń, które usunie rekord ze stolika nauczycieli, w którym ID Wartość to 1. delete_teacher spust zostanie zwolniony, jeśli jakikolwiek rekord zostanie usunięty z nauczyciele' tabela.

Usuń od nauczycieli, gdzie id = 1;

Poniższe dane wyjściowe pokazuje, że jeden rekord został usunięty z tabeli nauczycieli. Więc delete_teacher spust zostanie zwolniony i usunie wszystkie zapisy z zawierającej tabeli kursów 1 w Nauczyciela_id pole.

Teraz uruchom następujące polecenia Wybierz, aby sprawdzić, które rekordy są usuwane z nauczyciele I kursy tabele.

Wybierz * od nauczycieli;
Wybierz * z kursów;

Wyjście pokazuje, że jeden rekord został usunięty z tabeli nauczycieli, a dwie rekordy zostały usunięte z tabeli kursów za pomocą spustu.

Przykład-3: Utwórz zamiast uruchomienia aktualizacji

Spust zamiast aktualizacji można zastosować tylko w widokach tabeli. Musisz więc utworzyć widok tabeli i funkcję, aby przetestować użycie tego typu spustu. Uruchom następującą instrukcję SQL, aby utworzyć funkcję o nazwie insert_course () które zaktualizują wartości nauczyciele i kursy Tabela po włożeniu nowego rekordu do kursy tabela. Celem tej funkcji jest przypisanie nauczyciela do nowego kursu, jeśli nauczyciel jest dostępny.

Utwórz lub zastąp funkcję insert_course ()
Zwraca wyzwalacz jako
$$
OGŁOSIĆ
Tec_id int;
ZACZYNAĆ
Wstaw do kursów (nazwa, credit_hour)
Wartości (nowe.Nazwa, nowy.Godzina kredytowa);
Wybierz id ID w TEC_ID od nauczycieli, jeśli jest dostępny = prawdziwy limit 1;
Aktualizacja nauczycieli Ustaw dostępny = false, gdzie id = tec_id;
Aktualizacja kursów Ustaw nauczyciela_id = Tec_ID gdzie nauczyciel_id = 0;
Zwrócić nowy;
KONIEC
$$
Język PLPGSQL;

Następujące dane wyjściowe pojawi się, jeśli funkcja zostanie utworzona pomyślnie w Postgres Baza danych.

Uruchom następujące polecenie SQL, aby utworzyć widok tabeli kursów.

Utwórz wyświetlanie kursów_
Wybierz * z kursów;

Następujące dane wyjściowe pojawią się, jeśli widok zostanie utworzony pomyślnie.

Teraz uruchom następującą instrukcję SQL, aby utworzyć instread of Insert Trigger Uaktualnij dane które zostaną zwolnione, gdy nowy rekord zostanie wstawiony za pomocą create_view pogląd.

Utwórz Trigger Update_Data
Zamiast wstawić na kursach_view
Dla każdego wiersza
Wykonaj funkcję insert_course ();

Pojawi się następujące dane wyjściowe, jeśli utworz się spust pomyślnie.

Uruchom następujące oświadczenie Wstaw, aby wstawić nowy rekord do tabeli kursów za pomocą kurses_view pogląd.

Wstaw do kursów_wórz (nazwa, credit_hour)
Wartości („Wyższa matematyka”, 3.0);

Następujące dane wyjściowe pojawią się, jeśli dane zostaną pomyślnie wstawiane za pomocą View.

Teraz uruchom poniższe wyciągi, aby sprawdzić, w jaki sposób kursy i tabele nauczycieli zostały zmodyfikowane po włożeniu nowego rekordu do tabeli kursów za pomocą View.

Wybierz * od nauczycieli;
Wybierz * z Courses_View;

Poniższe dane wyjściowe pokazuje, że nowy rekord został włożony do tabeli kursów i dostępnego pola nauczyciele' Tabela została zaktualizowana z „t” do „f”, gdzie wartość identyfikatora wynosi 3, a ta wartość identyfikatora została zaktualizowana w kursy Tabela, aby przypisać tego nauczyciela do nowo wstawionego kursu.

Wniosek

Wiele zadań bazy danych można wykonać automatycznie za pomocą wyzwalacza w bazie danych PostgreSQL. Każdy spust jest wykonywany za pomocą konkretnej funkcji. W tym samouczku wyjaśniono wiele celów używania wyzwalaczy, tworząc wiele wyzwalaczy z funkcją. Utworzono tutaj trzy różne typy wyzwalaczy, które pomogą nowym użytkownikom PostgreSQL w poznaniu sposobu tworzenia i używania wyzwalaczy w bazie danych PostgreSQL.