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

Mis on Trigger sees PostgreSQL?

A PostgreSQL Trigger on funktsioon, mis käivitatakse automaatselt, kui andmebaasiobjektil toimub andmebaasi sündmus. Näiteks laud. Andmebaasisündmuste näited, mis võivad päästiku aktiveerida, hõlmavad INSERT, UPDATE, DELETE jne. Pealegi, kui loote tabeli jaoks päästiku, siis tabeli kustutamisel käivitatakse see automaatselt.

Kuidas Triggerit kasutatakse PostgreSQL?

Päästiku saab selle loomise ajal märkida operaatoriga FOR EACH ROW. Sellist päästikut kutsutakse üks kord iga operatsiooniga muudetud rea jaoks. Päästiku saab selle loomise ajal märkida ka operaatoriga FOR EACH STATEMENT. See päästik 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 käivitamisfunktsioon, peaksime selle siduma oma hinnatabeliga. Anname päästikule nime hind_trigger. Enne uue kirje loomist käivitatakse muudatuste logimiseks automaatselt päästikfunktsioon. 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 hinna tabelisse kirje sisestanud, tuleks kirje lisada ka tabelisse Price_Audit. See tuleneb päästikust, mille oleme hinnatabelis loonud. Kontrollime seda:

SELECT * FROM Price_Audits;

See tagastab järgmise:

PostgreSQL Loo Trigger

Päästik töötas edukalt.

Postgresi 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:

Postgresi loendi käivitaja

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

Postgres Drop Trigger

Kukkuda a 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 kustutamiseks tabelis Price käivitame järgmise käsu:

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

Nüüd vaatame, kuidas kõik kolm toimingut pgAdmini abil sooritati.

Kuidas luua trigerit PostgreSQL kasutades pgAdminit

Siit saate teada, kuidas saate pgAdmini abil Postgresis päästiku luua:

Samm 1) Logige sisse oma pgAdmini kontole

Avage pgAdmin ja logige oma mandaatide abil oma kontole sisse

2. samm) looge demo andmebaas

  1. Vasakpoolsel navigeerimisribal klõpsake nuppu 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 auditfunci kood

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 päästiku loomiseks kood

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)
  2. 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

Päästikute eemaldamine pgAdmini abil

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

DROP TRIGGER example_trigger IF EXISTS
ON Company

kokkuvõte

  • A PostgreSQL triger viitab funktsioonile, mis käivitub automaatselt, kui andmebaasiobjektil, näiteks tabelis, toimub andmebaasi sündmus.
  • Selliste andmebaasisündmuste näideteks on INSERT, UPDATE, DELETE jne.
  • Päästik eksisteerib ainult selle andmebaasiobjekti eluea jooksul, mille jaoks see loodi.
  • Kui andmebaasiobjekt kustutatakse, kustutatakse ka päästik.
  • PostgreSQL päästikud luuakse käsu CREATE TRIGGER abil.
  • Iga päästik on seotud funktsiooniga, mis näitab, mida päästik selle käivitamisel teeb.

Laadige alla selles õpetuses kasutatud andmebaas

Võta see postitus kokku järgmiselt: