Maybaygiare.org

Blog Network

PostgreSQL – TRIGGERS

Advertisements

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;
annonser

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.