Kas ir Postgresql trigeri?
PostgreSQL trigeris ir funkcija, kas tiek aktivizēta automātiski, kad datu bāzes objektā notiek datu bāzes notikums. Piemēram, galds.
Piemēri datu bāzes notikumiem, kas var aktivizēt aktivizētāju, ir INSERT, UPDATE, DELETE utt. Turklāt, izveidojot tabulas aktivizētāju, trigeris tiks automātiski nomests, kad šī tabula tiek izdzēsta.
Šajā PostgreSQL apmācībā jūs uzzināsiet sekojošo:
- Kas ir Postgresql trigeri?
- Kā aktivizētāju izmantoja POSRGREQL?
- Trigera izveide
- Izmantojot pgAdmin
- Trigeru nomešana
Kā aktivizētāju izmantoja POSRGREQL?
Trigeru var atzīmēt ar operatoru FOR EACH ROW tā izveidošanas laikā. Šāds sprūda tiks izsaukts vienu reizi katrai rindai, kuru modificē operācija. Trigeru var arī atzīmēt ar operatoru FOR EACH STATEMENT tā izveides laikā. Šis sprūda konkrētai operācijai tiks izpildīta tikai vienu reizi.
Trigera izveide
Lai izveidotu trigeri, mēs izmantojam funkciju CREATE TRIGGER. Funkcijas sintakse:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-nameON table-name[-- Trigger logic];
Trigera nosaukums ir sprūda nosaukums.
PIRMS, PĒC un INSTEAD ir atslēgvārdi, kas nosaka, kad tiks aktivizēts trigeris.
Notikuma nosaukums ir notikuma nosaukums, kas izraisīs trigera izsaukšanu. Tas var būt INSERT, UPDATE, DELETE utt.
Tabulas nosaukums ir tās tabulas nosaukums, kurā jāizveido aktivizētājs.
Ja aktivizētājs ir jāizveido operācijai INSERT, mums jāpievieno kolonnas nosaukuma parametrs ON.
Šāda sintakse to parāda:
CREATE TRIGGER trigger-name AFTER INSERT ON column-nameON table-name[-- Trigger logic];
Piemēram:
Mēs izmantosim zemāk norādīto cenu tabulu:
Cena:
Izveidosim vēl vienu tabulu Price_Audits, kurā reģistrēsim cenas tabulā veiktās izmaiņas:
CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL);
Tagad mēs varam definēt jaunu funkciju ar nosaukumu auditfunc:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$BEGININSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);RETURN NEW;END;$my_table$ LANGUAGE plpgsql;
Iepriekš minētā funkcija tabulā Price_Audits ievietos ierakstu, ieskaitot jauno rindas ID un ieraksta izveides laiku.
Tagad, kad mums ir aktivizēšanas funkcija, mums tas ir jāpiesaista mūsu cenu tabulai. Mēs piešķirsim aktivizētājam nosaukumu price_trigger. Pirms tiek izveidots jauns ieraksts, aktivizēšanas funkcija tiks automātiski izsaukta, lai reģistrētu izmaiņas. Šis ir sprūda:
CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc();
Ievietosim jaunu ierakstu cenu tabulā:
INSERT INTO PriceVALUES (3, 400);
Tagad, kad esam ievietojuši ierakstu tabulā Cena, ieraksts jāievieto arī tabulā Price_Audit. Tas notiks kā trigera rezultāts, ko esam izveidojuši tabulā Cena. Pārbaudīsim to:
SELECT * FROM Price_Audits;
Tas atgriezīs:
Sprūda darbojās veiksmīgi.
Saraksta aktivizētāji
Visi aktivizētāji, kurus izveidojat PostgreSQL, tiek glabāti tabulā pg_trigger. Lai skatītu datu bāzē esošo aktivizētāju sarakstu, vaicājiet tabulai, izpildot komandu SELECT, kā parādīts zemāk:
SELECT tgname FROM pg_trigger;
Tādējādi tiek parādīts:
Tabulas pg_trigger kolonna tgname apzīmē sprūda nosaukumu.
Atbrīvojošie trigeri
Lai nomestu PostgreSQL trigeri, mēs izmantojam paziņojumu DROP TRIGGER ar šādu sintaksi:
DROP TRIGGER [IF EXISTS] trigger-nameON table-name [ CASCADE | RESTRICT ];
Trigera nosaukuma parametrs apzīmē dzēšamā trigera nosaukumu.
Tabulas nosaukums apzīmē tās tabulas nosaukumu, no kuras ir jāizdzēš sprūda.
Klauzula IF EXISTS mēģina izdzēst esošo aktivizētāju. Mēģinot izdzēst trigeri, kas nepastāv, neizmantojot klauzulu IF EXISTS, tiks parādīta kļūda.
Opcija CASCADE palīdzēs automātiski nomest visus objektus, kas ir atkarīgi no sprūda.
Ja izmantojat opciju RESTRICT, aktivizētājs netiks izdzēsts, ja objekti ir atkarīgi no tā.
Piemēram:
Lai tabulā Cena dzēstu trigeri ar nosaukumu example_trigger, mēs izpildām šādu komandu:
Lai nomestu trigeri ar nosaukumu example_trigger tabulā Uzņēmums, izpildiet šādu komandu:
DROP TRIGGER example_trigger IF EXISTSON Company;
Izmantojot pgAdmin
Tagad redzēsim, kā visas trīs darbības tika veiktas, izmantojot pgAdmin.
Aktivizētāju izveide
Lai to paveiktu, izmantojot pgAdmin, rīkojieties šādi:
1. darbība. Piesakieties savā pgAdmin kontā.
2. solis)
- Kreisajā pusē esošajā navigācijas joslā noklikšķiniet uz Databases.
- Noklikšķiniet uz Demo.
3. solis. Lai izveidotu tabulu Price_Audits, ierakstiet vaicājumu redaktoru:
CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL)
4. solis) Noklikšķiniet uz pogas Izpildīt.
5. solis. Palaidiet šo kodu, lai definētu funkciju auditfunc:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$BEGININSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);RETURN NEW;END;$my_table$ LANGUAGE plpgsql
6. darbība. Palaidiet šo kodu, lai izveidotu trigeri price_trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc()
7. solis)
- Izpildiet šo komandu, lai tabulā Cena ievietotu jaunu ierakstu:
INSERT INTO PriceVALUES (3, 400)
- Palaidiet šo komandu, lai pārbaudītu, vai ieraksts tika ievietots tabulā Price_Audits:
SELECT * FROM Price_Audits
Tam vajadzētu atgriezt sekojošo:
8. solis. Pārbaudīsim tabulas Cena_Audits saturu:
Saraksta aktivizētāji
1. solis. Palaidiet šo komandu, lai pārbaudītu aktivizētājus jūsu datu bāzē:
SELECT tgname FROM pg_trigger
Tādējādi tiek parādīts:
Trigeru nomešana
Lai nomestu trigeri ar nosaukumu example_trigger tabulā Uzņēmums, izpildiet šādu komandu:
DROP TRIGGER example_trigger IF EXISTSON Company
Kopsavilkums:
- PostgreSQL trigeris attiecas uz funkciju, kas tiek aktivizēta automātiski, kad datubāzes notikums notiek datu bāzes objektā, piemēram, tabulā.
- Šādu datu bāzes notikumu piemēri ir INSERT, UPDATE, DELETE utt.
- Sprūda pastāv tikai tās datu bāzes objekta darbības laikā, kuram tas tika izveidots.
- Ja datu bāzes objekts tiek izdzēsts, tiks izdzēsts arī trigeris.
- PostgreSQL aktivizētāji tiek izveidoti, izmantojot CREATE TRIGGER paziņojumu.
- Katrs trigeris ir saistīts ar funkciju, kas norāda, ko aktivizētājs darīs, kad tas tiks izsaukts.
Lejupielādējiet šajā apmācībā izmantoto datu bāzi