Budowa triggerów: BEFORE/AFTER, FOR EACH ROW
Rozumieć moment wykonania triggera, jego szczegółowość (wiersz a instrukcja) oraz znaczenie NEW i OLD wewnątrz funkcji triggera
Budowa triggerów: BEFORE/AFTER, FOR EACH ROW to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.
Czym jest wyzwalacz
Wyzwalacz to funkcja, którą baza danych wywołuje automatycznie przed lub po wykonaniu INSERT, UPDATE, DELETE albo TRUNCATE na tabeli.
Dwa elementy: funkcja i wyzwalacz
Należy napisać funkcję zwracającą trigger, a następnie przypisać ją do tabeli:
CREATE OR REPLACE FUNCTION set_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at := NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trg_set_updated_at
BEFORE UPDATE ON users
FOR EACH ROW EXECUTE FUNCTION set_updated_at();BEFORE a AFTER
- BEFORE — uruchamia się przed zapisaniem wiersza; może modyfikować NEW
- AFTER — uruchamia się po zapisie; służy do efektów ubocznych (audyt, powiadomienia)
FOR EACH ROW a FOR EACH STATEMENT
- FOR EACH ROW — uruchamia się raz dla każdego zmodyfikowanego wiersza; dostępne są
NEWiOLD - FOR EACH STATEMENT — uruchamia się raz dla każdej instrukcji, bez dostępu do poszczególnych wierszy
NEW i OLD
W wyzwalaczu wierszowym:
NEW— nowy wiersz (INSERT, UPDATE)OLD— poprzedni wiersz (UPDATE, DELETE)
Znaczenie wartości zwracanej
W przypadku wyzwalaczy wierszowych BEFORE:
- Zwróć
NEW, aby kontynuować operację na tym wierszu - Zwróć zmodyfikowane
NEW, aby zmienić zapisywane dane - Zwróć
NULL, aby anulować operację dla tego wiersza
Filtr WHEN
Warunkowe uruchamianie:
CREATE TRIGGER trg_log_status
AFTER UPDATE OF status ON orders
FOR EACH ROW WHEN (OLD.status IS DISTINCT FROM NEW.status)
EXECUTE FUNCTION log_status_change();OF column
BEFORE/AFTER UPDATE może uruchamiać się tylko wtedy, gdy zmienią się określone kolumny:
CREATE TRIGGER ... AFTER UPDATE OF status ON orders ...Wiele wyzwalaczy
Wyzwalacze uruchamiają się w kolejności alfabetycznej według nazwy wyzwalacza. Używaj prefiksów (00_, 10_, ...), aby kontrolować kolejność.
Wydajność wyzwalaczy
Wyzwalacze wierszowe uruchamiają się dla każdego wiersza — złożona logika w wyzwalaczu wierszowym × duża liczba operacji DML = wolne działanie. W przypadku masowych efektów ubocznych preferuj wyzwalacze instrukcji.
Wyłączanie wyzwalaczy
Tymczasowe pomijanie:
ALTER TABLE orders DISABLE TRIGGER trg_audit;
-- bulk load...
ALTER TABLE orders ENABLE TRIGGER trg_audit;
-- Disable ALL triggers (use carefully):
ALTER TABLE orders DISABLE TRIGGER ALL;Rekurencja wyzwalaczy
Instrukcja UPDATE w wyzwalaczu, która modyfikuje tę samą tabelę, ponownie uruchamia wyzwalacz. Używaj zabezpieczeń (pg_trigger_depth()) albo starannie zaprojektuj rozwiązanie.
Podsumowanie
Wyzwalacze automatyzują reakcje na poziomie poszczególnych wierszy.
- Funkcja zwracająca TRIGGER + CREATE TRIGGER
- BEFORE do modyfikowania, AFTER do efektów ubocznych
- NEW/OLD do dostępu do wiersza
- WHEN i OF column do ograniczania zakresu uruchamiania
Szybkie sprawdzenie
Chce Pan/Pani automatycznie aktualizować kolumnę updated_at przy każdej zmianie wiersza. Jaka konfiguracja wyzwalacza będzie właściwa?
Często zadawane pytania
Czy lekcja „Budowa triggerów: BEFORE/AFTER, FOR EACH ROW” jest bezpłatna?
Tak — pełny tekst „Budowa triggerów: BEFORE/AFTER, FOR EACH ROW” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Budowa triggerów: BEFORE/AFTER, FOR EACH ROW”?
Rozumieć moment wykonania triggera, jego szczegółowość (wiersz a instrukcja) oraz znaczenie NEW i OLD wewnątrz funkcji triggera Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć SQL Academy?
Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Budowa triggerów: BEFORE/AFTER, FOR EACH ROW”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?
Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Budowa triggerów: BEFORE/AFTER, FOR EACH ROW
- Podstawy funkcji PL/pgSQL
- Bloki DO i kod anonimowy
- Audytowanie tabel za pomocą triggerów