PostgreSQL utløser: Opprett, slipp eksempel

Innholdsfortegnelse:

Anonim

Hva er Postgresql triggere?

En PostgreSQL-utløser er en funksjon som utløses automatisk når en databasehendelse oppstår på et databaseobjekt. For eksempel et bord.

Eksempler på databasehendelser som kan aktivere en trigger inkluderer INSERT, UPDATE, DELETE, etc. Når du oppretter en trigger for en tabell, vil utløseren slippes automatisk når den tabellen slettes.

I denne PostgreSQL-opplæringen lærer du følgende:

  • Hva er Postgresql triggere?
  • Hvordan utløser brukes i POSRGREQL?
  • Opprette en utløser
  • Bruke pgAdmin
  • Dropping Triggers

Hvordan utløser brukes i POSRGREQL?

En utløser kan markeres med FOR EACH ROW-operatøren under opprettelsen. En slik utløser vil bli kalt en gang for hver rad endret av operasjonen. En utløser kan også merkes med FOR EACH STATEMENT-operatøren under opprettelsen. Denne utløseren vil bare bli utført en gang for en bestemt operasjon.

Opprette en utløser

For å lage en utløser bruker vi CREATE TRIGGER-funksjonen. Her er syntaksen for funksjonen:

CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-nameON table-name[-- Trigger logic];

Utløsernavnet er navnet på utløseren.

FØR, ETTER og INSTEAD AV er nøkkelord som bestemmer når utløseren skal påberopes.

Hendelsesnavnet er navnet på hendelsen som vil føre til at utløseren blir påkalt. Dette kan være INSERT, UPDATE, DELETE, etc.

Tabellnavnet er navnet på tabellen som utløseren skal opprettes på.

Hvis utløseren skal opprettes for en INSERT-operasjon, må vi legge til parameteren PÅ kolonnenavn.

Følgende syntaks demonstrerer dette:

CREATE TRIGGER trigger-name AFTER INSERT ON column-nameON table-name[-- Trigger logic];

For eksempel:

Vi vil bruke pristabellen nedenfor:

Pris:

La oss lage en annen tabell, Price_Audits, hvor vi vil logge endringene som er gjort i Pris-tabellen:

CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL);

Vi kan nå definere en ny funksjon som heter auditfunc:

CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$BEGININSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);RETURN NEW;END;$my_table$ LANGUAGE plpgsql;

Ovennevnte funksjon vil sette inn en post i tabellen Price_Audits inkludert den nye rad-ID og tidspunktet posten er opprettet.

Nå som vi har utløserfunksjonen, bør vi binde den til pristabellen vår. Vi vil gi utløseren navnet price_trigger. Før en ny post opprettes, aktiveres utløserfunksjonen automatisk for å logge endringene. Her er utløseren:

CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc();

La oss sette inn en ny post i pristabellen:

INSERT INTO PriceVALUES (3, 400);

Nå som vi har satt inn en post i Pris-tabellen, bør en post også settes inn i Price_Audit-tabellen. Dette vil være som et resultat av utløseren som vi har opprettet på Pris-tabellen. La oss sjekke dette:

SELECT * FROM Price_Audits;

Dette vil returnere følgende:

Utløseren fungerte vellykket.

Oppføring utløser

Alle utløsere du oppretter i PostgreSQL, lagres i pg_trigger-tabellen. For å se listen over utløsere du har i databasen, spør du tabellen ved å kjøre SELECT-kommandoen som vist nedenfor:

SELECT tgname FROM pg_trigger;

Dette returnerer følgende:

Tgname-kolonnen i pg_trigger-tabellen angir navnet på utløseren.

Slippe utløsere

For å slippe en PostgreSQL-utløser bruker vi DROP TRIGGER-setningen med følgende syntaks:

DROP TRIGGER [IF EXISTS] trigger-nameON table-name [ CASCADE | RESTRICT ];

Parameteren trigger-name angir navnet på triggeren som skal slettes.

Tabellnavnet angir navnet på tabellen som utløseren skal slettes fra.

IF EXISTS-klausulen prøver å slette en utløser som eksisterer. Hvis du prøver å slette en utløser som ikke eksisterer uten å bruke IF EXISTS-klausulen, vil du få en feil.

CASCADE-alternativet hjelper deg med å automatisk slippe alle objekter som er avhengige av utløseren.

Hvis du bruker RESTRICT-alternativet, blir ikke utløseren slettet hvis objekter er avhengig av det.

For eksempel:

For å slette utløseren som heter example_trigger på tabellen Pris, kjører vi følgende kommando:

For å slippe utløseren med navnet example_trigger på tabellen Company, kjør følgende kommando:

DROP TRIGGER example_trigger IF EXISTSON Company;

Bruke pgAdmin

La oss nå se hvordan alle tre handlingene ble utført ved hjelp av pgAdmin.

Opprette utløsere

For å oppnå det samme gjennom pgAdmin, gjør du dette:

Trinn 1) Logg inn på pgAdmin-kontoen din.

Steg 2)

  1. Fra navigasjonslinjen til venstre - Klikk på Databaser.
  2. Klikk på Demo.

Trinn 3) For å opprette tabellen Price_Audits, skriv spørringseditoren:

CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL)

Trinn 4) Klikk på Utfør-knappen.

Trinn 5) Kjør følgende kode for å definere funksjonen auditfunc:

CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$BEGININSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);RETURN NEW;END;$my_table$ LANGUAGE plpgsql

Trinn 6) Kjør følgende kode for å lage utløseren price_trigger:

CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc()

Trinn 7)

  1. Kjør følgende kommando for å sette inn en ny post i pristabellen:
    INSERT INTO PriceVALUES (3, 400)
  2. Kjør følgende kommando for å sjekke om en post ble satt inn i Price_Audits-tabellen:
    SELECT * FROM Price_Audits

    Dette skal returnere følgende:

Trinn 8) La oss sjekke innholdet i Price_Audits-tabellen:

Oppføring utløser

Trinn 1) Kjør følgende kommando for å sjekke utløserne i databasen:

SELECT tgname FROM pg_trigger

Dette returnerer følgende:

Dropping Triggers

For å slippe utløseren med navnet example_trigger på tabellen Company, kjør følgende kommando:

DROP TRIGGER example_trigger IF EXISTSON Company

Sammendrag:

  • En PostgreSQL-utløser refererer til en funksjon som utløses automatisk når en databasehendelse oppstår på et databaseobjekt, for eksempel en tabell.
  • Eksempler på slike databasehendelser inkluderer INSERT, UPDATE, DELETE, etc.
  • En utløser eksisterer bare i løpet av levetiden til databaseobjektet det ble opprettet for.
  • Hvis databaseobjektet blir slettet, blir også utløseren slettet.
  • PostgreSQL-utløsere opprettes ved hjelp av CREATE TRIGGER-setningen.
  • Hver utløser er assosiert med en funksjon som sier hva utløseren vil gjøre når den påkalles.

Last ned databasen som brukes i denne veiledningen