Hvordan sette opp PostgreSql utløser

Hvordan sette opp PostgreSql utløser
“Utløseren brukes i en hvilken som helst database for å utføre en automatisert oppgave når en bestemt databasehendelse vises. Det kalles tilbakeringingsfunksjonen til databasen som kalles automatisk basert på arrangementet. Det er mange fordeler med å bruke triggere i PostgreSQL -databasen. Tre typer triggere kan opprettes, som er beskrevet i denne opplæringen ved å bruke flere eksempler.”

Noen fordeler ved å bruke triggere

  • Datavalidering kan gjøres enkelt.
  • Den unike verdien av en ny post kan genereres.
  • Applikasjonsutvikling blir raskere.
  • Forretningsreglene for søknaden kan håndheves.
  • Vedlikehold av applikasjonen blir enklere.

Syntaks

Syntaksen for å lage en trigger er gitt nedenfor.

Opprett [eller erstatt] [begrensning] Trigger Name før | Etter | I stedet for hendelse [eller ...]
På tabellnavn
[Fra referert_table_name]
[Ikke utsatt | [Utsatt] [Opprinnelig umiddelbar | Opprinnelig utsatt]]
[Refererer til gammel | Ny tabell [som] overgang_relasjon_navn […]]
[For [hver] rad | Uttalelse]
[Når (tilstand)]
Utfør funksjon | Prosedyre funksjonsnavn (argumenter)
  • Opprett nøkkelord brukes til å lage en ny trigger, og erstatte nøkkelord brukes til å endre en eksisterende trigger.
  • Begrensningsalternativet brukes til å lage en begrensningsutløser som blir avfyrt basert på begrensningsverdien.
  • Et unikt triggernavn brukes til å lage triggeren.
  • Fire typer hendelser kan brukes til å lage en trigger. Dette er satt inn, oppdater, slett og avkortet.
  • Tre typer triggere som kan opprettes er FØR, ETTER, og I STEDET FOR. Utløserne kan opprettes for tabellen, utenlandsk bord og utsikt. FØR og ETTER Utløser støtteinnsats, oppdater og slette operasjoner for tabell og utenlandsk tabell i radnivå, og visningen også i uttalelsesnivå. I STEDET FOR Trigger støtter innsats, oppdater og slette operasjoner for visning bare i radnivå. Avkortet hendelse kan bare brukes til tabell på uttalelsesnivå.
  • Etter å ha definert hendelsen, brukes navnet på tabellen eller utenlandsk tabell eller visning som utløser skal opprettes.
  • De referert_table_name brukes til utenlandsk nøkkelbegrensning og bare begrensningsutløseren.
  • Standard tidspunktet for avtrekkeren er definert av Ikke utsatt eller Utsatt eller Opprinnelig øyeblikkelig eller Opprinnelig utsatt.
  • Referanser Nøkkelord brukes til å erklære ett eller to forholdsnavn.
  • Gamle bord eller Ny tablE-klausulet definerer overgangsforholdet før bilder eller overgangsforholdet etter bilder.
  • overgang_relation_name brukes i avtrekkeren for overgangsforholdet.
  • For hver rad eller For hver uttalelse Definerer om triggerfunksjonen skal avfyres en gang for hver rad som er berørt av triggerhendelsen eller bare en gang per SQL -setning. For hver uttalelse er standard.
  • betingelse bestemmer om triggerfunksjonen vil bli utført eller ikke.
  • funksjonsnavn er en brukerdefinert funksjon som ikke tar noe argument, og returtypen er utløseren som utføres når utløseren branner.
  • Den komma-separerte listen over argumenter sendes til funksjonen når utløseren utføres.

Forutsetninger

EN. Installer PostgreSQL

Du må installere den nyeste versjonen av PostgreSQL -pakker på Linux -operativsystemet før du utfører SQL -uttalelsene som vises i denne opplæringen. Kjør følgende kommandoer for å installere og starte PostgreSQL:

$ sudo apt-get -y installer postgreSql postgreSql-contrib
$ sudo SystemCTL Start PostgreSql.service

B. Kjør følgende kommando for å logge på PostgreSQL med rotprivilegium.

$ sudo -u postgres psql

C. Du kan opprette en database som heter “testdb ” Ved å kjøre følgende SQL -setning.

# Opprett databasetestdb;

Hvis du vil lage et bord i Testdb database, så må du skrive “\ C” å endre databasen. Men i denne opplæringen endret jeg ikke databasen, og tabellen og alle funksjoner ble opprettet i standarddatabasen som heter Postgres.

Lag et bord som heter lærere og kurs med noen poster for å teste bruken av triggere som vil bli opprettet senere i denne opplæringen.

Lag bordlærere (
ID Seriell primærnøkkel,
Navn varchar (30),
adresse varchar (100),
KONTAKT_NO VARCHAR (20),
tilgjengelig bool standard true);
Lag bordkurs (
kurs_id seriell primærnøkkel,
Navn varchar (30),
Credit_hour Float,
lærer_id int standard 0);
Sett inn lærere (navn, adresse, kontakt_no, tilgjengelig)
verdier
('Nasir Uddin', 'Dhanmondi 15, Dhaka', '+8801947854523', falsk),
('Farzana Mahmud', '39/1, Jigatola, Dhaka ',' +88018553426754 ', falsk);
Sett inn i kurs (navn, kreditt_hour, lærer_id)
verdier
('Fysikk', 2.0, 1),
('Kjemi', 2.0, 2),
('Matematikk', 3.0, 1);

Utløser eksempler

Hver trigger er assosiert med en PostgreSQL -funksjon. Så du må opprette funksjonen før du oppretter avtrekkeren. Måten å lage forskjellige typer triggere er vist i denne delen av opplæringen.

Eksempel 1: Lag før sett inn trigger

Førinnsatsen utløser branner før du utfører en innsatsoperasjon. Kjør følgende SQL -setning for å opprette en funksjon som er navngitt før_insert () som vil bli brukt i en Før innsats avtrekker. Et av de viktigste formålene med å bruke en trigger er datavalidering. Følgende funksjon vil sjekke om de bestemte feltene er tomme eller ikke. Hvis noen av feltverdiene forblir tomme, vil en bestemt feilmelding bli hevet. En annen validering vil bli sjekket for Navn felt, og en feilmelding vil bli hevet hvis lengden på dette feltet er mindre enn 5. Den neste betingede uttalelsen brukes til å sammenkoble strengverdien “+88” med kontaktnummer Hvis lengden på kontaktnummer felt er 11.

Opprette eller erstatte funksjonen før_insert ()
Returnerer utløser som
$$
BEGYNNE
Hvis nytt.name = "eller nytt.adresse = "eller ny.contact_no = "da
heve navnet eller adressen eller kontakt_no -feltet er tomt.';
SLUTT OM;
Hvis lengde (ny.Navn) < 5 THEN
Hev 'Navnfeltet må inneholde mer enn 5 tegn.';
SLUTT OM;
Hvis lengde (ny.kontakt_no) = 11 da
NY.contact_no = '+88' || NY.kontaktnummer;
SLUTT OM;
Return nytt;
SLUTT;
$$
Språk 'PLPGSQL';

Følgende utgang vises hvis funksjonen opprettes med suksess i Postgres database.

Kjør følgende SQL -setning for å lage en utløser som heter check_before_insert som vil utføre før_insert () funksjon før du setter inn den nye posten til lærere bord.

Lag trigger check_before_insert
Før innsats
På lærere
For hver rad
Utføre funksjon før_insert ();

Følgende utgang vises hvis avtrekkeren opprettes med hell.

Kjør følgende innsatserklæring som inneholder alle gyldige data.

Sett inn lærere (navn, adresse, kontakt_no)
Verdier ('Zafar Iqbal', 'Mirpur, Dhaka', '01738975634');

Følgende utgang vises hvis den nye posten er satt inn.

Kjør følgende innsatserklæring som inneholder ugyldige data for navnefeltet.

Sett inn lærere (navn, adresse, kontakt_no)
Verdier ('Lina', 'Malibag, Dhaka', '01790975630');

Følgende feilmelding vises for ugyldig navneverdi.

Kjør følgende innsatserklæring som inneholder den tomme verdien for adresse og kontaktnummer felt, og den tomme verdien for disse feltene er ugyldig.

Sett inn lærere (navn, adresse, kontakt_no)
Verdier ('Nilufar Rahman', ",");

Følgende feilmelding vises for de tomme verdiene.

Kjør følgende valgte setning for å sjekke hvilke poster som er satt inn etter bruk av før innsatsen utløser.

Velg * fra lærere;

Følgende utgang viser at bare en post er satt inn etter bruk av avtrekkeren.

Eksempel-2: Opprett etter slettutløser

Etter slettutløserbranner etter å ha slettet noen post fra den aktuelle tabellen. Kjør følgende SQL -setning for å opprette en funksjon som er navngitt After_Delete () som vil bli brukt i en Etter sletting utløser for å slette de relaterte radene fra kurs tabell når en post blir slettet fra lærere bord. Her, an gammel.id har blitt brukt til å spore slettet id fra lærere bord.

Lag funksjon etter_delete ()
Returnerer utløser som
$$
BEGYNNE
Slett fra kurs der lærer_id = gammel.id;
Return gammel;
SLUTT;
$$
Språk PLPGSQL;

Følgende utgang vises hvis funksjonen opprettes med suksess i Postgres database.

Kjør følgende SQL -setning for å lage en utløser som heter delete_teacher som vil utføre After_Delete () funksjon etter å ha slettet en post fra lærere tabell som vil slette postene fra kurs bord der lærer_id Verdimatcher med de slettede id verdien av lærere bord.

Lag trigger Delete_Teacher
Etter sletting
På lærere
For hver rad
Utføre funksjon etter_delete ();

Følgende utgang vises hvis avtrekkeren opprettes med hell.

Kjør følgende sletterklæring som vil slette posten fra lærerens bord der id Verdien er 1. De delete_teacher Utløser vil bli avfyrt hvis noen post blir slettet fra lærere bord.

Slett fra lærere der ID = 1;

Følgende utdata viser at en post er slettet fra lærerens bord. Så delete_teacher Utløser vil bli avfyrt og slette alle poster fra kursbordet som inneholder 1 i lærer_id felt.

Kjør nå følgende utvalgte kommandoer for å sjekke hvilke poster som er slettet fra lærere og kurs bord.

Velg * fra lærere;
Velg * fra kurs;

Utgangen viser at en post er slettet fra lærerens bord, og to poster er slettet fra kursbordet ved å bruke utløseren.

Eksempel-3: Lag i stedet for oppdatering

I stedet for oppdatering kan du bare brukes på tabellvisningen. Så du må lage et syn på tabellen og en funksjon for å teste bruken av denne typen utløser. Kjør følgende SQL -setning for å opprette en funksjon som er navngitt insert_course () som vil oppdatere verdiene til lærere og kurs tabell etter å ha satt inn en ny post til kurs bord. Hensikten med denne funksjonen er å tildele en lærer for det nye kurset hvis læreren er tilgjengelig.

Opprette eller erstatte funksjonsinnsatsen ()
Returnerer utløser som
$$
ERKLÆRE
tec_id int;
BEGYNNE
Sett inn i kurs (navn, kreditt_hour)
Verdier (ny.Navn, nytt.kreditt_hour);
Velg ID i TEC_ID fra lærere der tilgjengelig = True Limit 1;
Oppdater lærere sett tilgjengelig = falsk hvor id = tec_id;
Oppdateringskurs Sett lærer_id = tec_id hvor lærer_id = 0;
Return nytt;
SLUTT
$$
Språk PLPGSQL;

Følgende utgang vises hvis funksjonen opprettes med suksess i Postgres database.

Kjør følgende SQL -kommando for å opprette en visning av kurs -tabellen.

Opprett visningskurs_view som
Velg * fra kurs;

Følgende utgang vises hvis visningen opprettes.

Kjør nå følgende SQL -setning for å opprette anstrengelsen av Sett inn trigger som er navngitt update_data som blir avfyrt når en ny post settes inn ved å bruke create_view utsikt.

Lag trigger update_data
I stedet for å sette inn på kurs_view
For hver rad
Utføre funksjonsinnsatsen_Course ();

Følgende utgang vises hvis avtrekkeren opprettes med hell.

Kjør følgende innsatserklæring for å sette inn en ny post inn i kurs -tabellen ved å bruke kurs_view utsikt.

Sett inn i Courses_View (navn, Credit_hour)
verdier ('høyere matematikk', 3.0);

Følgende utdata vises hvis dataene er satt inn vellykket ved hjelp av visning.

Kjør nå følgende utvalgte utsagn for å sjekke hvordan kursene og lærere -tabellene er endret etter å ha satt inn en ny post i kurs -tabellen ved å bruke visning.

Velg * fra lærere;
Velg * fra Courses_View;

Følgende utdata viser at en ny post er satt inn i kursbordet, og det tilgjengelige feltet til lærere Tabellen er oppdatert fra “T” til “F”, der ID -verdien er 3, og denne ID -verdien er oppdatert i kurs Tabell for å tilordne denne læreren for det nylig innsatte kurset.

Konklusjon

Mange databaseoppgaver kan gjøres automatisk ved å bruke en trigger i PostgreSQL -databasen. Hver trigger utføres ved å bruke en bestemt funksjon. Mange formål med å bruke triggere er blitt forklart i denne opplæringen ved å lage flere triggere med funksjonen. Tre forskjellige typer triggere er opprettet her som vil hjelpe de nye PostgreSQL -brukerne til å kjenne måten å lage og bruke triggere i PostgreSQL -databasen.