PostgreSQL Päästikud: looge, loetlege ja kukutage näitega

⚡ Nutikas kokkuvõte

PostgreSQL Päästikud on funktsioonid, mis käivituvad automaatselt, kui tabelis käivitub sündmus INSERT, UPDATE või DELETE, võimaldades andmebaasil reegleid jõustada, muudatusi logida ja andmeid auditeerida ilma täiendava rakenduskoodita.

  • Määratlus: Päästik on funktsioon, mis käivitatakse automaatselt andmebaasi sündmuse (nt INSERT, UPDATE või DELETE) korral.
  • 🔁 Reguleerimisala: FOR EACH ROW käivitab päästiku iga mõjutatud rea kohta üks kord, samas kui FOR EACH STATEMENT käivitab selle iga operatsiooni kohta üks kord.
  • 🛠️ Loo: CREATE TRIGGER seob funktsiooni tabeliga ja määrab ajastuse BEFORE, AFTER või INSTEAD OF.
  • ???? Nimekiri: Andmebaasis olevate päästikute nägemiseks tehke pg_trigger kataloogile päring SELECT tgname käsuga.
  • 🗑️ Tilk: DROP TRIGGER eemaldab päästiku ja IF EXISTS hoiab ära vea, kui see puudub.
  • 🤖 Tehisintellekti abi: Tehisintellekti assistendid genereerivad päästikfunktsioone ja pakuvad lihtkeelse päringu põhjal välja ENNE või PÄRAST ajastust.

PostgreSQL Triggerid

Mis on Trigger sees PostgreSQL?

A PostgreSQL Trigger on funktsioon, mis käivitatakse automaatselt, kui andmebaasisündmus toimub andmebaasiobjektil, näiteks tabelil. Päästiku aktiveerimiseks sobivad näiteks järgmised andmebaasisündmused: INSERT, UPDATE, DELETE jne. Lisaks, kui loote tabeli jaoks päästiku, siis see kustutatakse tabeli kustutamisel automaatselt.

Kuidas Triggerit kasutatakse PostgreSQL?

Päästiku saab loomise ajal märkida operaatoriga FOR EACH ROW. Sellist päästikut kutsutakse iga toimingu poolt muudetud rea kohta üks kord välja. Päästiku saab loomise ajal märkida ka operaatoriga FOR EACH STATEMENT. Seda päästikut käivitatakse konkreetse toimingu jaoks ainult üks kord.

PostgreSQL Loo Trigger

Päästiku loomiseks kasutame funktsiooni CREATE TRIGGER. Siin on funktsiooni süntaks:

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

Päästiku nimi on päästiku nimi.

ENNE, PÄRAST ja INSTEEAD OF on märksõnad, mis määravad, millal päästik käivitatakse.

Sündmuse nimi on selle sündmuse nimi, mis käivitab päästiku. See võib olla INSERT, VÄRSKENDAMINE, KUSTUTAMINE jne.

Tabeli nimi on selle tabeli nimi, millel käivitaja luuakse.

Kui päästik luuakse toimingu INSERT jaoks, peame lisama parameetri ON veeru nimi.

Seda näitab järgmine süntaks:

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

PostgreSQL Loo käivitaja näide

Kasutame allpool toodud hinnatabelit:

Hind:

PostgreSQL Loo Trigger

Loome teise tabeli Price_Audits, kuhu logime hinnatabelis tehtud muudatused:

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

Nüüd saame määratleda uue funktsiooni nimega 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;

Ülaltoodud funktsioon lisab tabelisse Price_Audits kirje, sealhulgas uue rea ID ja kirje loomise aja.

Nüüd, kui meil on päästikfunktsioon olemas, peaksime selle siduma oma hinnatabeliga. Anname päästikule nimeks price_trigger. Enne uue kirje loomist kutsutakse päästikfunktsioon muudatuste logimiseks automaatselt välja. Siin on päästik:

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

Sisestame hinnatabelisse uue kirje:

INSERT INTO Price
VALUES (3, 400);

Nüüd, kui oleme kirje lisanud tabelisse Price, peaks loodud päästiku tõttu kirje lisama ka tabelisse Price_Audits. Kontrollime järgmist:

SELECT * FROM Price_Audits;

See tagastab järgmise:

PostgreSQL Loo Trigger

Päästik töötas edukalt.

PostgreSQL Loendi käivitaja

Kõik käivitajad, mille loote PostgreSQL on salvestatud tabelisse pg_trigger. Teil olevate päästikute loendi vaatamiseks andmebaas, küsige tabelit, käivitades käsu SELECT, nagu allpool näidatud:

SELECT tgname FROM pg_trigger;

See tagastab järgmise:

PostgreSQL Loendi käivitaja

Tabeli pg_trigger veerg tgname tähistab päästiku nime.

PostgreSQL Drop Päästik

Kui päästikut enam vaja pole, saate selle sama lihtsalt eemaldada. PostgreSQL päästik, kasutame avaldust DROP TRIGGER järgmise süntaksiga:

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

Parameeter trigger-name tähistab kustutatava päästiku nime.

Tabelinimi tähistab tabeli nime, kust päästik kustutatakse.

Klausel IF EXISTS püüab kustutada olemasoleva päästiku. Kui proovite kustutada päästik, mida pole olemas, ilma IF EXISTS klauslit kasutamata, kuvatakse tõrketeade.

Valik CASCADE aitab teil automaatselt loobuda kõik päästikust sõltuvad objektid.

Kui kasutate suvandit PIIRATA, ei kustutata päästikut, kui objektid sellest sõltuvad.

Näiteks:

Päästiku nimega example_trigger kukutamiseks tabelist Ettevõte käivitage järgmine käsk:

DROP TRIGGER example_trigger IF EXISTS
ON Company;

pgAdmini kasutamine

Vaatame nüüd, kuidas kõiki kolme toimingut pgAdmini abil teostatakse.

Kuidas luua trigerit PostgreSQL kasutades pgAdminit

Siin on, kuidas saate päästiku luua PostgreSQL pgAdmini abil:

Samm 1) Logige sisse oma pgAdmini kontole

Avage pgAdmin ja logige oma kontole sisse oma volituste abil.

2. samm) looge demo andmebaas

  1. Klõpsake vasakpoolsel navigeerimisribal valikul Andmebaasid.
  2. Klõpsake Demo.

Loo sissepääs PostgreSQL kasutades pgAdminit

Samm 3) Tippige päring

Tabeli Price_Audits loomiseks tippige redaktorisse päring:

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

Samm 4) Käivitage päring

Klõpsake nuppu Käivita.

Loo sissepääs PostgreSQL kasutades pgAdminit

Samm 5) Käivitage Code auditifunktsiooni jaoks

Funktsiooni auditfunc määratlemiseks käivitage järgmine kood:

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

Samm 6) Käivitage Code päästiku loomiseks

Käivitage hind_trigger käivitamiseks järgmine kood:

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

7. samm) Sisestage uus kirje

  1. Uue kirje lisamiseks hinnatabelisse käivitage järgmine käsk:
INSERT INTO Price
VALUES (3, 400)
  1. Käivitage järgmine käsk, et kontrollida, kas kirje on tabelisse Price_Audits sisestatud:
SELECT * FROM Price_Audits

See peaks tagastama järgmise:

Loo sissepääs PostgreSQL kasutades pgAdminit

Samm 8) Kontrollige tabeli sisu

Kontrollime tabeli Price_Audits sisu.

Käivitajate loetlemine pgAdmini abil

Step 1) Käivitage järgmine käsk, et kontrollida oma andmebaasi käivitajaid:

SELECT tgname FROM pg_trigger

See tagastab järgmise:

Käivitajate loetlemine pgAdmini abil

Dropping pgAdmini abil käivitatavad toimingud

Päästiku nimega example_trigger kukutamiseks tabelist Ettevõte käivitage järgmine käsk:

DROP TRIGGER example_trigger IF EXISTS
ON Company

Laadige alla selles õpetuses kasutatud andmebaas

KKK

BEFORE käivitub päästik enne reamuudatuse kirjutamist, et rida muuta või tagasi lükata. AFTER käivitub pärast muudatuse salvestamist, mis sobib logimis- ja auditeerimisülesanneteks.

INSTEAD OF päästik defineeritakse vaates, mitte tabelis. See asendab INSERT, UPDATE või DELETE käsud kohandatud loogikaga, muutes kirjutuskaitstud vaate kirjutatavaks.

Päästikufunktsioonid kirjutatakse tavaliselt PL/pgSQL-is. PostgreSQL toetab ka PL/Python, PL/Perl, PL/Tcl ja C, nii et saate valida keele, mis sobib teie loogikaga.

Selle väljalülitamiseks kasutage käsku ALTER TABLE tabeli-nimi DISABLE TRIGGER päästiku-nimi ja uuesti sisselülitamiseks käsku ENABLE TRIGGER. See hoiab ära katkestused.ping ja päästiku taasloomine hulgilaadimise ajal.

Jah. Iga päästik lisab igale mõjutatud reale või lausele tööd, seega võib keeruline päästikuloogika kirjutamist aeglustada. Hoidke päästikufunktsioonid lühikesed ja indekseerige kõik veerud, mida nad pärivad.

Jah. Kui päästik muudab teist tabelit, millel on samuti päästikud, käivituvad ka need, luues kaskaadpäästikuid. PostgreSQL piirab pesastamise sügavust, et vältida lõpmatuid tsükleid.

Tehisintellektiga kodeerimisassistendid muudavad lihtkeelse päringu täielikuks CREATE TRIGGER lauseks ja päästikfunktsiooniks, pakuvad välja BEFORE või AFTER ajastust ning selgitavad genereeritud PL/pgSQL-i kiireks ülevaatamiseks.

Jah. Tööriistad nagu pgai ja GPT-põhised assistendid tõlgivad kirjeldatud reegli päästiku SQL-iks ja saavad luua INSERT-päästikuid, mis sildistavad või valideerivad uusi andmeid automaatselt nende saabumisel.

Võta see postitus kokku järgmiselt: