PostgreSQL - TRIGGERS

PostgreSQL Triggere
er databasetilbakeringing funksjoner, som automatisk utføres /påberopes når en bestemt database hendelse inntreffer. Følgende er viktige punkter om PostgreSQL utløser:

PostgreSQL trigger kan spesifiseres til brann før operasjonen forsøkes på rad (før begrensninger er sjekket og INSERT, UPDATE eller DELETE forsøkes); eller etter at operasjonen er fullført (etter begrensninger blir sjekket og INSERT, UPDATE eller DELETE har fullført); eller i stedet for operasjonen (i tilfelle av innsatser, oppdateringer eller sletter på et vis).

En trigger som er merket for hver rad kalles en gang for hver rad at driften modifiserer . I kontrast, en utløser som er merket for hvert utsagn bare utfører en gang for en gitt operasjon, uavhengig av hvor mange rader det modifiserer.

  • Både NÅR klausul og utløse handlinger kan få tilgang til elementer av raden blir satt inn, slettet eller oppdatert ved å bruke referanser på formen NEW.column-navn Hotell og OLD.column-navn
    , der kolonnenavn er navnet på en kolonne fra tabell som avtrekkeren er assosiert med.

    Hvis en NÅR klausul er levert, PostgreSQL uttalelser spesifiserte utføres bare for rader hvor NÅR klausul er sant. Hvis ingen NÅR klausul er levert, blir PostgreSQL uttalelser henrettet for alle radene.

  • Hvis flere triggere av samme slag er definert for den samme hendelsen, vil de bli sparket i alfabetisk rekkefølge etter navnet.

    før, etter eller i stedet for søkeord bestemmer når trigger handlinger vil bli utført i forhold til innsetting, endring eller fjerning av den tilhørende raden.
    < li>

    Triggers automatisk droppet når tabellen som de er tilknyttet, er droppet.

    I tabellen som skal endres må eksistere i samme database som tabellen eller visningen som avtrekkeren er festet og man må bruke bare tabellnavn
    , ikke database.tablename
    .

    En CONSTRAINT alternativ når spesifisert skaper en begrensning trigger
    . Dette er det samme som en vanlig utløser, bortsett fra at tidspunktet for avfyring avtrekkeren kan justeres ved hjelp av SET begrensninger. Begrensningen triggere forventes å heve et unntak når begrensningene de gjennomfører er brutt ..

    Syntax:

    Den grunnleggende syntaks for å skape en trigger Anmeldelser er som følger:
    CREATE TRIGGER trigger_name [FØR | ETTER | STEDET FOR] event_nameON table_name [- Trigger logikken går her ....];

    Her EVENT_NAME
    kan være INSERT, DELETE, etter UPDATE, etter og TRUNCATE
    database drift på nevnte tabellen table_name
    . Du kan eventuelt angi for hver rad etter tabellen navn

    Følgende er syntaksen til å skape en trigger på en UPDATE operasjon på en eller flere bestemte kolonner i en tabell som følger:.
    CREATE TRIGGER trigger_name [FØR | ETTER] OPPDATERING AV column_nameON table_name [- Trigger logikken går her ....];
    Eksempel

    La oss vurdere en sak hvor vi ønsker å beholde revisjons rettssak for hver post som blir satt inn i COMPANY tabellen, som vi vil skape nye som følger (Drop COMPANY bordet hvis du allerede har det):
    testdb = # CREATE TABLE COMPANY (ID INT PRIMARY KEY NOT NULL, NAME TEKST NOT NULL, AGE INT NOT NULL, ADRESSE CHAR (50) , LØNN REAL);

    For å holde tilsyn rettssaken, vil vi lage en ny tabell kalt REVISJON hvor loggmeldinger vil bli satt inn når det er en oppføring i COMPANY bordet for en ny rekord:
    testdb = # CREATE TABLE AUDIT ( EMP_ID INT NOT NULL, ENTRY_DATE TEKST NOT NULL);

    Her er ID AUDIT posten ID, og ​​EMP_ID er ID som vil komme fra COMPANY bord og DATE vil holde tidsstempel når posten vil bli opprettet i COMPANY tabellen. Så nå la oss lage en trigger på COMPANY tabellen som følger:
    testdb = # CREATE TRIGGER example_trigger etter sette ON COMPANYFOR hver rad EXECUTE PROSEDYRE auditlogfunc ();

    Hvor auditlogfunc () er en PostgreSQL prosedyre Anmeldelser og har følgende definisjon:
    CREATE OR REPLACE FUNKSJON auditlogfunc () returnerer TRIGGER AS $ example_table $ BEGYNN INSERT INTO AUDIT (EMP_ID, ENTRY_DATE) VERDIER (new.ID, current_timestamp); TILBAKE NEW; END; $ example_table $ SPRÅK plpgsql;

    Nå vil vi starte selve arbeidet, la oss begynne å sette rekord i COMPANY bord som skal resultere i å skape en revisjonsloggpost i AUDIT tabellen. Så la oss lage en post i COMPANY tabellen som følger:
    testdb = # INSERT INTO COMPANY (ID, navn, alder, adresse, LØNN) VALUES (1, 'Paul', 32, "California", 20000.00);

    Dette vil opprette en rekord i COMPANY tabellen, som er som følger:
    id | Navn | alder | adressere | lønn ---- + ------ + ----- + -------------- + -------- 1 | Paul | 32 | California | 20000

    Samtidig vil én post bli opprettet i AUDIT tabellen. Denne posten er et resultat av en trigger, som vi har laget på INSERT operasjon på COMPANY bordet. Lignende måte kan du lage dine triggere på UPDATE og DELETE operasjoner basert på dine krav
    emp_id. | entry_date -------- + ------------------------------- 1 | 2013-05-05 15: 49: 59,968 + 05: 30 (1 p)
    Listing UTLØSER

    Du kan liste ned alle triggere i den gjeldende databasen fra pg_trigger
    tabell som følger:.
    testdb = # SELECT * FROM pg_trigger;

    Over PostgreSQL uttalelsen vil liste ned alle triggere

    Hvis du ønsker å liste ned triggere på en bestemt tabell, og deretter bruke AND klausul med tabellnavn som følger:
    testdb = # SELECT tgname Fra pg_trigger, pg_class WHERE tgrelid = pg_class.oid OG relname = 'selskap';

    Over PostgreSQL uttalelsen vil også liste ned kun én oppføring som følger:
    tgname-- --------------- example_trigger (1 p)
    slippe UTLØSER

    Følgende er DROP-kommandoen, som kan brukes til å slippe en eksisterende trigger:
    testdb = # DROP TRIGGER trigger_name;