PostgreSQL Triggers are database callback functions, which are automatically performed/invoked when a specified database event occurs.
følgende er vigtige punkter om postgraduate triggers −
-
postgraduate trigger kan angives til fire
-
før handlingen forsøges på en række (før begrænsninger er markeret, og indsatsen, opdateringen eller sletningen forsøges)
-
efter operationen er afsluttet (efter begrænsninger er markeret, og indsatsen, opdateringen eller sletningen er afsluttet)
-
efter operationen er afsluttet (efter begrænsninger er markeret, og indsatsen, opdateringen eller sletningen er afsluttet)
-
i stedet for handlingen (i tilfælde af indsatser, opdateringer eller sletter i en visning)
-
-
en trigger, der er markeret for hver række, kaldes en gang for hver række, der operationen ændres. I modsætning hertil udføres en trigger, der er markeret for hver sætning, kun en gang for en given operation, uanset hvor mange rækker den ændrer.
-
begge, når-klausulen og udløserhandlingerne, kan få adgang til elementer i rækken, der indsættes, slettes eller opdateres ved hjælp af referencer til formularen ny.kolonne-navn og gammel.kolonne-navn, hvor kolonne-navn er navnet på en kolonne fra tabellen, som udløseren er knyttet til.
-
Hvis der leveres en når-klausul, udføres de angivne postgraduate udsagn kun for rækker, for hvilke når-klausulen er sand. Hvis nej når klausul leveres, udføres postgraduate udsagn for alle rækker.
-
Hvis flere udløsere af samme art er defineret for den samme begivenhed, vil de blive fyret i alfabetisk rækkefølge efter navn.
-
nøgleordet før, efter eller i stedet for bestemmer, hvornår triggerhandlingerne udføres i forhold til indsættelse, ændring eller fjernelse af den tilknyttede række.
-
udløsere droppes automatisk, når den tabel, de er knyttet til, droppes.
-
tabellen, der skal ændres, skal eksistere i den samme database som den tabel eller visning, som udløseren er knyttet til, og man skal kun bruge Tabelnavn, ikke database.bordnavn.
-
en BEGRÆNSNINGSINDSTILLING, når den er angivet, opretter en begrænsningsudløser. Dette er det samme som en almindelig trigger, bortset fra at tidspunktet for udløseren kan justeres ved hjælp af indstillede begrænsninger. Begrænsningsudløsere forventes at rejse en undtagelse, når de begrænsninger, de implementerer, overtrædes.
syntaks
den grundlæggende syntaks for oprettelse af en trigger er som følger −
CREATE TRIGGER trigger_name event_nameON table_name;
Her kan event_name være Indsæt, Slet, Opdater og afkort databasedrift på den nævnte tabel table_name. Du kan eventuelt angive for hver række efter Tabelnavn.
følgende er syntaksen for at oprette en trigger på en OPDATERINGSHANDLING på en eller flere specificerede kolonner i en tabel som følger −
CREATE TRIGGER trigger_name UPDATE OF column_nameON table_name;
eksempel
lad os overveje en sag, hvor vi ønsker at holde revisionsforsøg for hver post, der indsættes i FIRMATABELLEN, som vi opretter nyligt som følger (Drop FIRMATABEL, hvis du allerede har det).
testdb=# CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);
for at holde revisionsforsøg opretter vi en ny tabel kaldet revision, hvor logmeddelelser indsættes, når der er en post i VIRKSOMHEDSTABELLEN for en ny post −
testdb=# CREATE TABLE AUDIT( EMP_ID INT NOT NULL, ENTRY_DATE TEXT NOT NULL);
Her er ID REVISIONSPOST-ID, og EMP_ID er ID ‘ et, der kommer fra VIRKSOMHEDSTABELLEN, og dato holder tidsstempel, når posten er registreret, og datoen vil blive gemt, når posten er registreret vil blive oprettet i selskab tabel. Så lad os nu oprette en trigger på FIRMABORDET som følger −
testdb=# CREATE TRIGGER example_trigger AFTER INSERT ON COMPANYFOR EACH ROW EXECUTE PROCEDURE auditlogfunc();
hvor auditlogfunc() er en postgraduate procedure og har følgende definition −
CREATE OR REPLACE FUNCTION auditlogfunc() RETURNS TRIGGER AS $example_table$ BEGIN INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, current_timestamp); RETURN NEW; END;$example_table$ LANGUAGE plpgsql;
nu starter vi det egentlige arbejde. Lad os begynde at indsætte post i VIRKSOMHEDSTABEL, som skal resultere i oprettelse af en revisionslogpost i REVISIONSTABEL. Så lad os oprette en post i VIRKSOMHEDSTABELLEN som følger −
testdb=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)VALUES (1, 'Paul', 32, 'California', 20000.00 );
dette opretter en post i VIRKSOMHEDSTABELLEN, hvilket er som følger −
id | name | age | address | salary----+------+-----+--------------+-------- 1 | Paul | 32 | California | 20000
samme tid oprettes en post i REVISIONSTABELLEN. Denne post er resultatet af en udløser, som vi har oprettet på Indsæt operation på selskab bord. På samme måde kan du oprette dine udløsere på opdatering og slette operationer baseret på dine krav.
emp_id | entry_date--------+------------------------------- 1 | 2013-05-05 15:49:59.968+05:30(1 row)
notering udløsere
Du kan liste ned alle udløsere i den aktuelle database fra pg_trigger tabel som følger −
testdb=# SELECT * FROM pg_trigger;
ovenstående givne postgraduate erklæring vil liste ned alle udløsere.
Hvis du vil liste udløserne på en bestemt tabel, skal du bruge og klausul med Tabelnavn som følger −
testdb=# SELECT tgname FROM pg_trigger, pg_class WHERE tgrelid=pg_class.oid AND relname='company';
ovenstående givne postgraduate erklæring vil også liste ned kun en post som følger −
tgname----------------- example_trigger(1 row)
Dropping TRIGGERS
følgende er DROP −kommandoen, som du kan vælge mellem kan bruges til at slippe en eksisterende Trigger –
testdb=# DROP TRIGGER trigger_name;