PostgreSQL - Funksjoner

Som i de fleste databaser kan vi kjede en rekke setninger SQL og behandle dem som en enhet i en funksjonell blokk; de forskjellige databasene beskriver denne operasjonen med forskjellige navn, lagrede prosedyrer, moduler, makroer, etc.

I PostgreSQL de kalles funksjoner. Bortsett fra å forene flere SQL -setninger, gir disse funksjonene oss også muligheten til å utføre SQL -setninger ved hjelp av prosessuelle språk (PL).

I PostgreSQL vi har flere alternativer for dette og muligheten til å utvide dem.

1. PostgreSQL -funksjoner


Anatomi av en funksjon
Uavhengig av språket som brukes til å skrive funksjonene, har de en struktur, denne strukturen kan syntetiseres med følgende:
 OPPRETT ELLER ERSTAT FUNKSJON func_name (arg1_arg1datatype) RETURNS some_type / setoff sometype / TABLE / (…) / AS $$ BODY off function $$ LANGUAGE language_of_function
Hvis vi beskriver det vi ser, er det ganske enkelt, OPPRETT ELLER ERSTAT FUNKSJONEN er funksjonsopprettelsesklausulen, func_name er navnet som arg1 vil ha, er parameteren den vil motta og arg1_datatype er typen data som blir sagt parameter, det vil si hvis det er et heltall, en streng, etc. I RETURNERING Vi returnerer resultatet av funksjonen vår, $$ er begynnelsen på blokken som vil vike for funksjonens kropp og deretter ender det samme med $$ og til slutt SPRÅK lar oss spesifisere språket som funksjonen er skrevet på.

Det er en veldefinert og ganske lesbar struktur, så vi bør ikke ha problemer med å lage funksjonene våre.

Skrive funksjoner med SQL
Skriv funksjonene med SQL Det er ganske enkelt og raskt, det er å ta våre SQL -setninger i utgangspunktet og legge til topptekst og bunntekst til funksjonene, og vi er ferdige.

Men som alt annet kommer dette på bekostning av noen ofre, for eksempel mister vi fleksibiliteten at hvis vi kunne arbeide med et annet språk for å skape flere grener av betinget utførelseskontroll, kan vi ikke ha mer enn én SQL -setning, selv om dette kan løses ved hjelp av forskjellige metoder.

Den største fordelen er at siden SQL er planleggeren PostgreSQL lar oss dra nytte av indeksene og dermed fremskynde utførelsen, på den annen side med andre språk vil funksjonen alltid være en svart boks

La oss nå se på en funksjon skrevet med SQL:

 OPPRETT ELLER ERSTAT FUNKSJON ins_logs (param_user_name varchar, param_description text) RETURNS integer AS $$ INSERT INTO logs (user_name, description) VALUES ($ 1, $ 2) RETURNING log_id; $$ SPRÅK 'sql' VOLATILE;
Vi ser at vi følger strukturen definert ovenfor og på slutten i seksjonen SPRÅK vi definerer 'sql' klausul FLYKTIGE At den eier betyr at funksjonen kan returnere noe annerledes med hvert anrop til den, selv om den mottar de samme parameterne. For å kalle funksjonen vår kan vi bruke:
 SELECT ins_logs ('lhsu', 'this is a test') Som nytt_id;
Vi lager en setning Å VELGE, funksjonen er aktiv og det som returnerer er det vi vil motta, og i dette tilfellet vil vi se en verdi som vi kaller new_id og at funksjonen returnerer som log_id.
Vi kan til og med bruke en funksjon til å gjøre en registreringoppdatering og returnere en ugyldig parameter som i dette eksemplet:
 OPPRETT ELLER ERSTAT FUNKSJON upd_logs (log_id heltall, param_user_name varchar, param_description tekst) RETURNS void AS $$ UPDATE logs SET user_name = $ 2, description = $ 3, log_ts = CURRENT_TIMESTAMPWHERE log_id = $ 1; $$ LANGUAGE 'sql' VL ' ' FLYKTIGE '
Da vi er ugyldige trenger vi ikke et mottakerfelt, så vi utfører det som følger:
 SELECT upd_logs (12, 'robe', 'Change to regina');
Her kan vi se at vi fjernet det siste trinnet i Som nytt_id fra forrige samtale.
Med dette fullfører vi denne opplæringen, vi kan nå gjøre våre grunnleggende funksjoner i SQLog dermed lette og forenkle mange aktiviteter som vi kan trenge i et program eller system vi bygger.

2. PostgreSQL -funksjoner på andre språk


En av de mest attraktive funksjonene til PostgreSQL er at det ikke bare er begrenset til SQL -språkTakket være lasting av moduler kan vi velge å innlemme avanserte funksjoner, inkludert muligheten for å bruke forskjellige språk for å bygge funksjoner, med dette kan vi oppnå stor fleksibilitet ved å bruke bedre generasjonsmuligheter for betingelser og fordelene som er forbundet med de forskjellige språkene.

Skrivefunksjoner med PL / pgSQL
I det øyeblikket når vi merker at SQL -standarden kommer til kort for spørsmålene vi ønsker å utføre i en funksjon, kan vi alltid ty til bruk av PL / pgSQL; en av dens forskjeller og forbedringer i forhold til SQL er at lokale variabler kan deklareres ved hjelp av DECLARE -setningen, vi kan også ha kontroll over flyten, og vi må omslutte kroppens funksjon i en BEGIN END -blokk.

La oss se et eksempel på en funksjon skrevet på dette språket:

 CREATE FUNCTION sel_logs_rt (param_user_name varchar) RETURNS TABLE (log_id int, user_name varchar (50), description text, log_ts timestamptz) AS $$ BEGIN RETURN QUERY SELECT log_id, user_name, description, log_ts FROM logger WHERE user_name = param_ SLUTT; $$ SPRÅK 'plpgsql' STABIL; 
La oss nå se hvordan du skriver funksjoner med Python.

Skrivefunksjoner med Python
Python er et ganske rent programmeringsspråk, som har et stort antall biblioteker tilgjengelig.
PostgreSQL er den eneste databasemotoren som lar deg bruke Python til å bygge funksjoner.

For å få muligheten til å opprette funksjoner med Python, må vi først sørge for at språket er installert på serveren vår. Når vi vet at vi har det installert, må vi aktivere utvidelsene i PostgreSQL ved å bruke følgende kommandoer:

 OPPRETT UTVIDELSE plpython2u; OPPRETT UTVIDELSE plpython3u; 
Vi må sørge for at Python er i gang før vi aktiverer utvidelsene for å unngå feil.

Grunnleggende funksjoner med Python
Når vi har aktivert alt for å kunne bruke Python, skal vi begynne å bygge funksjonen vår, det er viktig å vite at PostgreSQL kan konvertere datatypene til Python -datatyper og omvendt. PL / Python er til og med i stand til å returnere matriser og sammensatte typer.

La oss se nedenfor en funksjon som utfører et tekstsøk i en online ressurs, noe som ikke kunne gjøres med PL / pgSQL, i det følgende bildet vil vi se koden, og deretter vil vi gjøre den tilsvarende forklaringen.

  • Vi importerer bibliotekene vi skal bruke.
  • Vi gjør websøket ved å sammenkoble brukerens inndataparametere.
  • Vi leser svaret og lagrer det i en HTML -fil kalt raw_html.
  • Vi lagrer den delen av HTML -koden som starter med og slutter før starten av.
  • Vi fjerner HTML -tagger og mellomrom og lagrer variabelen kalt resultat igjen.
  • Vi returnerer det endelige resultatet.
  • En annen interessant egenskap ved å bruke Python er at vi kan samhandle direkte med operativsystemet, la oss se en funksjon som lager en katalogoppføring, det bør bemerkes at dette må opprettes av en superbruker:
 OPPRETT ELLER ERSTAT FUNKSJON list_incoming_files () RETURNER SETOF tekst AS $$ import os return os.listdir ('/ innkommende') $$ LANGUAGE 'plpython2u' VOLATILE SECURITY DEFINER;
Hva er bruken av dette? Vi kan spørre oss selv, for tenk oss at vi vil konsultere filene vi har tilgjengelig i et system, og samtalen til funksjonen vil være omtrent slik:
 VELG filnavn FRA list_incoming_files () Som filnavn HVOR filnavn ILIKE '% .csv'
Med dette fullfører vi denne opplæringen, vi håndterer allerede opprettelsen av funksjoner på andre språk på PostgreSQL, som gir oss et uendelig felt når det gjelder å oppfylle våre krav.

wave wave wave wave wave