PostgreSQL Triggers are database callback functions, which are automatically performed/invoked when a specified database event occurs.
-
PostgreSQL trigger kan spesifiseres til brann
-
før operasjonen er forsøkt på en rad (før begrensninger er merket og INNSATSEN, OPPDATERING eller SLETTING er forsøkt)
-
etter at operasjonen er fullført (etter begrensninger er merket og INNSATSEN, OPPDATERINGEN eller SLETTINGEN er fullført)
-
i stedet for operasjonen (i tilfelle innlegg, oppdateringer Eller Sletter På en visning)
-
-
kalles en utløser som er merket for hver rad en Gang for Hver Rad som operasjonen endrer seg. I motsetning utfører en utløser som er merket for HVER SETNING bare en gang for en gitt operasjon, uavhengig av hvor mange rader den endrer.
-
BÅDE WHEN-setningsdelen og trigger-handlingene kan få tilgang til elementer i raden som settes inn, slettes eller oppdateres ved hjelp av referanser TIL SKJEMAET NYTT.column-navn OG GAMMEL.kolonnenavn, der kolonnenavn er navnet på en kolonne fra tabellen som utløseren er knyttet til.
-
Hvis EN WHEN-setning leveres, Utføres postgresql-setningene bare for rader SOM WHEN-setningsdelen er sann for. Hvis NEI NÅR klausul leveres, Utføres PostgreSQL-setningene for alle rader.
-
hvis flere utløsere av samme type er definert for samme hendelse, vil de bli sparket i alfabetisk rekkefølge etter navn.
-
før, ETTER eller I STEDET for nøkkelord bestemmer når utløserhandlingene skal utføres i forhold til innsetting, endring eller fjerning av den tilhørende raden.
-
Utløsere slippes automatisk når tabellen som de er knyttet til, slippes.
-
tabellen som skal endres, må eksistere i samme database som tabellen eller visningen som utløseren er festet til, og man må bare bruke tabellnavn, ikke database.tabellnavn.
-
ET BEGRENSNINGSALTERNATIV når angitt oppretter en begrensningsutløser. Dette er det samme som en vanlig utløser, bortsett fra at tidspunktet for utløseren avfyring kan justeres VED HJELP AV SETT BEGRENSNINGER. Begrensningsutløsere forventes å heve et unntak når begrensningene de implementerer, brytes.
Syntaks
den grunnleggende syntaksen for å opprette en utløser er som følger −
CREATE TRIGGER trigger_name event_nameON table_name;
her kan event_name SETTES INN, SLETTE, OPPDATERE og AVKORTE databaseoperasjon på den nevnte tabellen table_name. Du kan eventuelt angi FOR HVER RAD etter tabellnavn.
følgende er syntaksen for å opprette en utløser PÅ EN OPPDATERINGSOPERASJON på en eller flere spesifiserte kolonner i en tabell som følger −
CREATE TRIGGER trigger_name UPDATE OF column_nameON table_name;
Eksempel
la oss vurdere et tilfelle der vi vil beholde audit trial for hver post som settes inn I SELSKAPSTABELLEN, som vi vil opprette nylig som følger (Slipp SELSKAPSTABELL 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 å holde audit trial, vil vi opprette en ny tabell kalt AUDIT hvor loggmeldinger vil bli satt inn når det er en oppføring i SELSKAPET tabellen for en ny post −
testdb=# CREATE TABLE AUDIT( EMP_ID INT NOT NULL, ENTRY_DATE TEXT NOT NULL);
HER ER ID REVISJON posten ID, OG EMP_ID ER ID, som kommer FRA SELSKAPET tabellen, OG DATO vil holde tidsstempel når posten vil bli opprettet i selskapets tabell. Så nå, la oss lage en utløser PÅ SELSKAPETS tabell som følger-
testdb=# CREATE TRIGGER example_trigger AFTER INSERT ON COMPANYFOR EACH ROW EXECUTE PROCEDURE auditlogfunc();
hvor auditlogfunc () Er En PostgreSQL-prosedyre og har følgende definisjon −
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;
nå starter vi det faktiske arbeidet. La oss begynne å sette inn post I SELSKAPSTABELL som skal resultere i å opprette en revisjonsloggpost i REVISJONSTABELL. Så la oss lage en post I FIRMABORDET som følger –
testdb=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)VALUES (1, 'Paul', 32, 'California', 20000.00 );
dette vil skape en post I FIRMABORDET, som er som følger −
id | name | age | address | salary----+------+-----+--------------+-------- 1 | Paul | 32 | California | 20000
samme tid vil en post bli opprettet i REVISJONSTABELLEN. Denne posten er resultatet av en utløser, som vi har opprettet på INSERT-operasjonen PÅ FIRMABORDET. På samme måte kan du opprette utløsere VED OPPDATERING og SLETTE operasjoner basert på dine krav.
emp_id | entry_date--------+------------------------------- 1 | 2013-05-05 15:49:59.968+05:30(1 row)
Oppføring UTLØSERE
du kan liste ned alle utløsere i den nåværende databasen fra pg_trigger-tabellen som følger –
testdb=# SELECT * FROM pg_trigger;
Ovennevnte gitt PostgreSQL-setning vil liste ned alle utløsere.
Hvis du vil liste utløserne på et bestemt bord, bruk OG klausul med tabellnavn som følger −
testdb=# SELECT tgname FROM pg_trigger, pg_class WHERE tgrelid=pg_class.oid AND relname='company';
Ovennevnte postgresql −setning vil også liste ned bare en oppføring som følger −
tgname----------------- example_trigger(1 row)
Slippe UTLØSERE
FØLGENDE ER DROP-kommandoen, som kan brukes til å slippe en eksisterende utløser –
testdb=# DROP TRIGGER trigger_name;