PostgreSQL Okidači: Stvaranje, popis i ispuštanje s primjerom

⚡ Pametni sažetak

PostgreSQL Okidači su funkcije koje se automatski pokreću kada se na tablici aktivira događaj INSERT, UPDATE ili DELETE, omogućujući bazi podataka da provodi pravila, zapisuje promjene i revidira podatke bez dodatnog aplikacijskog koda.

  • Definicija: Okidač je funkcija koja se automatski poziva pri događaju u bazi podataka kao što su INSERT, UPDATE ili DELETE.
  • 🔁 Opseg: Naredba FOR EACH ROW pokreće okidač jednom po zahvaćenom retku, dok naredba FOR EACH STAMENT pokreće okidač jednom po operaciji.
  • 🛠️ Stvoriti: CREATE TRIGGER veže funkciju za tablicu i postavlja vrijeme PRIJE, POSLIJE ili UMJESTO OF.
  • 📋 Popis: Upitajte katalog pg_trigger s SELECT tgname kako biste vidjeli svaki okidač u bazi podataka.
  • 🗑️ Pad: DROP TRIGGER uklanja okidač, a IF EXISTS sprječava grešku kada nedostaje.
  • 🤖 Pomoć za umjetnu inteligenciju: AI asistenti generiraju okidačke funkcije i predlažu vrijeme PRIJE ili POSLIJE na temelju zahtjeva napisanog jednostavnim jezikom.

PostgreSQL okidači

U čemu je Trigger PostgreSQL?

A PostgreSQL Okidač je funkcija koja se automatski pokreće kada se dogodi događaj baze podataka na objektu baze podataka, na primjer, tablici. Primjeri događaja baze podataka koji mogu aktivirati okidač uključuju INSERT, UPDATE, DELETE itd. Štoviše, kada stvorite okidač za tablicu, okidač će se automatski ukloniti kada se ta tablica izbriše.

Kako se Trigger koristi u PostgreSQL?

Okidač se može označiti operatorom FOR EACH ROW tijekom njegovog stvaranja. Takav okidač će se pozvati jednom za svaki redak koji je izmijenjen operacijom. Okidač se također može označiti operatorom FOR EACH STATEMENT tijekom njegovog stvaranja. Ovaj okidač će se izvršiti samo jednom za određenu operaciju.

PostgreSQL Izradi okidač

Za izradu okidača koristimo funkciju CREATE TRIGGER. Ovo je sintaksa funkcije:

CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name
ON table-name
[
 -- Trigger logic
];

Naziv okidača je naziv okidača.

BEFORE, AFTER i INSTEAD OF ključne su riječi koje određuju kada će se okidač pozvati.

Event-name je naziv događaja koji će uzrokovati pozivanje okidača. Ovo može biti INSERT, AŽURIRAJ, IZBRIŠI itd.

Ime tablice je ime tablice na kojoj se okidač treba kreirati.

Ako okidač treba stvoriti za operaciju INSERT, moramo dodati ON parametar imena stupca.

Sljedeća sintaksa to pokazuje:

CREATE TRIGGER trigger-name AFTER INSERT ON column-name
ON table-name
[
 -- Trigger logic
];

PostgreSQL Stvori primjer okidača

Koristit ćemo donju tablicu cijena:

Cijena:

PostgreSQL Izradi okidač

Kreirajmo još jednu tablicu, Price_Audits, gdje ćemo zabilježiti promjene napravljene u tablici cijena:

CREATE TABLE Price_Audits (
   book_id INT NOT NULL,
    entry_date text NOT NULL
);

Sada možemo definirati novu funkciju pod nazivom 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;

Gornja funkcija umetnut će zapis u tablicu Price_Audits uključujući novi ID retka i vrijeme stvaranja zapisa.

Sada kada imamo funkciju okidača, trebali bismo je povezati s našom tablicom Price. Okidaču ćemo dati naziv price_trigger. Prije nego što se stvori novi zapis, funkcija okidača će se automatski pozvati za bilježenje promjena. Evo okidača:

CREATE TRIGGER price_trigger AFTER INSERT ON Price
FOR EACH ROW EXECUTE PROCEDURE auditfunc();

Umetnimo novi zapis u tablicu cijena:

INSERT INTO Price
VALUES (3, 400);

Sada kada smo u tablicu Price umetnuli zapis, zapis bi također trebao biti umetnut u tablicu Price_Audits zbog okidača koji smo kreirali. Provjerimo ovo:

SELECT * FROM Price_Audits;

Ovo će vratiti sljedeće:

PostgreSQL Izradi okidač

Okidač je uspješno radio.

PostgreSQL Okidač popisa

Svi okidači koje stvorite u PostgreSQL pohranjeni su u tablici pg_trigger. Da biste vidjeli popis okidača koje imate na baza podataka, upitajte tablicu izvođenjem naredbe SELECT kao što je prikazano u nastavku:

SELECT tgname FROM pg_trigger;

Ovo vraća sljedeće:

PostgreSQL Okidač popisa

Stupac tgname tablice pg_trigger označava naziv okidača.

PostgreSQL Ispuštanje okidača

Kada okidač više nije potreban, možete ga jednako jednostavno ukloniti. Za ispuštanje PostgreSQL okidač, koristimo naredbu DROP TRIGGER sa sljedećom sintaksom:

DROP TRIGGER [IF EXISTS] trigger-name
ON table-name [ CASCADE | RESTRICT ];

Parametar trigger-name označava naziv okidača koji se želi izbrisati.

Naziv tablice označava naziv tablice iz koje se okidač želi obrisati.

Klauzula IF EXISTS pokušava izbrisati okidač koji postoji. Ako pokušate izbrisati okidač koji ne postoji bez korištenja klauzule IF EXISTS, dobit ćete pogrešku.

Opcija CASCADE pomoći će vam da automatski ispustite sve objekte koji ovise o okidaču.

Ako koristite opciju RESTRICT, okidač se neće izbrisati ako objekti ovise o njemu.

Na primjer:

Da biste ispustili okidač pod nazivom example_trigger na tablici Tvrtka, pokrenite sljedeću naredbu:

DROP TRIGGER example_trigger IF EXISTS
ON Company;

Koristeći pgAdmin

Sada pogledajmo kako se sve tri radnje izvode pomoću pgAdmin-a.

Kako stvoriti okidač u PostgreSQL koristeći pgAdmin

Evo kako možete stvoriti okidač u PostgreSQL koristeći pgAdmin:

Korak 1) Prijavite se na svoj pgAdmin račun

Otvorite pgAdmin i prijavite se na svoj račun koristeći svoje pristupne podatke.

Korak 2) Napravite demo bazu podataka

  1. Na navigacijskoj traci s lijeve strane kliknite Baze podataka.
  2. Pritisnite Demo.

Stvori okidač u PostgreSQL koristeći pgAdmin

Korak 3) Upišite upit

Za izradu tablice Price_Audits, upišite upit u editor:

CREATE TABLE Price_Audits (
   book_id INT NOT NULL,
    entry_date text NOT NULL
)

Korak 4) Izvršite upit

Pritisnite gumb Izvrši.

Stvori okidač u PostgreSQL koristeći pgAdmin

Korak 5) Pokrenite Code za revizijsku funkciju

Pokrenite sljedeći kod da definirate funkciju 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

Korak 6) Pokrenite Code za stvaranje okidača

Pokrenite sljedeći kod da biste stvorili okidač price_trigger:

CREATE TRIGGER price_trigger AFTER INSERT ON Price
FOR EACH ROW EXECUTE PROCEDURE auditfunc()

Korak 7) Umetnite novi zapis

  1. Pokrenite sljedeću naredbu za umetanje novog zapisa u tablicu cijena:
INSERT INTO Price
VALUES (3, 400)
  1. Pokrenite sljedeću naredbu da provjerite je li zapis umetnut u tablicu Price_Audits:
SELECT * FROM Price_Audits

Ovo bi trebalo vratiti sljedeće:

Stvori okidač u PostgreSQL koristeći pgAdmin

Korak 8) Provjerite sadržaj tablice

Provjerimo sadržaj tablice Price_Audits.

Okidači popisa pomoću pgAdmin-a

Korak 1) Pokrenite sljedeću naredbu da provjerite okidače u svojoj bazi podataka:

SELECT tgname FROM pg_trigger

Ovo vraća sljedeće:

Okidači popisa pomoću pgAdmin-a

Ispustitiping Okidači koji koriste pgAdmin

Da biste ispustili okidač pod nazivom example_trigger na tablici Tvrtka, pokrenite sljedeću naredbu:

DROP TRIGGER example_trigger IF EXISTS
ON Company

Preuzmite bazu podataka korištenu u ovom vodiču

Pitanja i odgovori

Okidač BEFORE pokreće se prije nego što se zapiše promjena retka, tako da može izmijeniti ili odbaciti redak. Okidač AFTER pokreće se nakon što je promjena spremljena, što je prikladno za zadatke zapisivanja i revizije.

Okidač INSTEAD OF definiran je na prikazu, a ne na tablici. Zamjenjuje INSERT, UPDATE ili DELETE prilagođenom logikom, čineći prikaz samo za čitanje mogućnim za pisanje.

Funkcije okidača se obično pišu u PL/pgSQL-u. PostgreSQL također podržava PL/Python, PL/Perl, PL/Tcl i C, tako da možete odabrati jezik koji odgovara vašoj logici.

Koristite ALTER TABLE naziv-tablice DISABLE TRIGGER naziv-okidača za isključivanje i ENABLE TRIGGER za ponovno uključivanje. Time se izbjegava gubitakping i ponovno stvaranje okidača tijekom skupnih učitavanja.

Da. Svaki okidač dodaje posao svakom pogođenom retku ili izrazu, pa teška logika okidača može usporiti pisanje. Funkcije okidača trebaju biti kratke i indeksirati sve stupce koje upituju.

Da. Ako okidač promijeni drugu tablicu koja također ima okidače, i oni se aktiviraju, stvarajući kaskadne okidače. PostgreSQL ograničava dubinu ugniježđivanja kako bi se spriječile beskonačne petlje.

AI asistenti za kodiranje pretvaraju zahtjev napisan jednostavnim jezikom u potpunu naredbu CREATE TRIGGER i okidačku funkciju, predlažu vrijeme BEFORE ili AFTER te objašnjavaju generirani PL/pgSQL za brzi pregled.

Da. Alati poput pgai-ja i GPT-baziranih asistenata prevode opisano pravilo u SQL okidač i mogu izraditi INSERT okidače koji automatski označavaju ili validiraju nove podatke kako stižu.

Sažmite ovu objavu uz: