PostgreSQL - funktioner

Som i de fleste databaser kan vi kæde en række sætninger SQL og behandle dem som en enhed i en funktionel blok; de forskellige databaser beskriver denne operation med forskellige navne, lagrede procedurer, moduler, makroer osv.

I PostgreSQL de kaldes funktioner. Bortset fra at forene flere SQL -sætninger giver disse funktioner os også mulighed for at udføre SQL -sætninger ved hjælp af proceduremæssige sprog (PL).

I PostgreSQL vi har flere muligheder for dette og muligheden for at udvide dem.

1. PostgreSQL -funktioner


Anatomi af en funktion
Uanset hvilket sprog der bruges til at skrive funktionerne, har de en struktur, denne struktur kan syntetiseres med følgende:
 OPRET ELLER ERSTAT FUNKTION 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, OPRET ELLER ERSTAT FUNKTION er funktionsoprettelsesklausulen, func_name er det navn, som arg1 vil have, er den parameter, den vil modtage, og arg1_datatype er den type data, der bliver sagt parameter, det vil sige, hvis det er et heltal, en streng osv. I VENDER TILBAGE Vi returnerer resultatet af vores funktion, $$ er begyndelsen på blokken, der vil vige for funktionens krop og derefter slutter det samme med $$ og til sidst SPROG giver os mulighed for at angive det sprog, som funktionen er skrevet på.

Det er en veldefineret og ganske læsbar struktur, så vi bør ikke have problemer med at oprette vores funktioner.

Skrivefunktioner med SQL
Skriv funktionerne ved hjælp af SQL Det er ganske let og hurtigt, det er at tage vores SQL -sætninger grundlæggende og tilføje overskrift og sidefod af funktionerne til det, og vi er færdige.

Men som alt andet kommer dette på bekostning af nogle ofre, for eksempel mister vi fleksibiliteten, at hvis vi kunne arbejde med et andet sprog for at skabe flere grene af betinget udførelseskontrol, kan vi ikke have mere end én SQL -sætning, selvom dette kan afhjælpes ved hjælp af forskellige metoder.

Den største fordel er, at siden SQL er planlæggeren PostgreSQL giver os mulighed for at drage fordel af indekserne og dermed fremskynde udførelsen, på den anden side med andre sprog vil funktionen altid være en sort boks

Lad os nu se på en funktion skrevet med SQL:

 OPRET ELLER ERSTAT FUNKTION ins_logs (param_user_name varchar, param_description text) RETURNS integer AS $$ INSERT INTO logs (user_name, description) VALUES ($ 1, $ 2) RETURNING log_id; $$ SPROG 'sql' VOLATILE;
Vi ser, at vi følger strukturen defineret ovenfor og i slutningen i afsnittet SPROG vi definerer 'sql' klausul FLUGTIG At den ejer betyder, at funktionen kan returnere noget anderledes med hvert opkald, der foretages til den, selvom den modtager de samme parametre. For derefter at kalde vores funktion kan vi bruge:
 VÆLG ins_logs ('lhsu', 'dette er en test') Som ny_id;
Vi laver en sætning VÆLG, funktionen er aktiv, og hvad der returnerer, er hvad vi vil modtage, og i dette tilfælde vil vi se en værdi, som vi kalder new_id, og som funktionen returnerer som log_id.
Vi kan endda bruge en funktion til at foretage en rekordopdatering og returnere en ugyldig parameter som i dette eksempel:
 OPRET ELLER ERSTAT FUNKTION upd_logs (log_id integer, param_user_name varchar, param_description text) RETURNS void AS $$ UPDATE logs SET user_name = $ 2, description = $ 3, log_ts = CURRENT_TIMESTAMPWHERE log_id = $ 1; $$ LANGUAT 'sql' VL ' 'FLUGTIG'
Da vi er ugyldige, har vi ikke brug for et modtagerfelt, så vi udfører det som følger:
 SELECT upd_logs (12, 'robe', 'Change to regina');
Her kan vi se, at vi fjernede det sidste trin i Som nyt_id fra det forrige opkald.
Med dette afslutter vi denne vejledning, vi kan nu udføre vores grundlæggende funktioner i SQLog dermed lette og forenkle mange aktiviteter, som vi kan have brug for inden for et program eller system, som vi bygger.

2. PostgreSQL fungerer på andre sprog


En af de mest attraktive træk ved PostgreSQL er, at det ikke kun er begrænset til SQL -sprogTakket være indlæsning af moduler kan vi vælge at inkorporere avancerede funktionaliteter, herunder muligheden for at bruge forskellige sprog til at opbygge funktioner, med dette kan vi opnå stor fleksibilitet ved hjælp af bedre generation af betingelser og de fordele, der er forbundet med de forskellige sprog.

Skrivefunktioner med PL / pgSQL
I det øjeblik, hvor vi bemærker, at SQL -standarden mangler forespørgsler, som vi ønsker at udføre i en funktion, kan vi altid ty til brugen af ​​PL / pgSQL; en af ​​dens forskelle og forbedringer i forhold til SQL er, at lokale variabler kan deklareres ved hjælp af DECLARE -sætningen, vi kan også have kontrol over flowet, og vi skal omslutte funktionsdelen i en BEGIN END -blok.

Lad os se et eksempel på en funktion skrevet på dette sprog:

 OPRET FUNKTION sel_logs_rt (param_brugernavn varchar) RETURNS TABLE (log_id int, user_name varchar (50), beskrivelsestekst, log_ts timestamptz) AS $$ BEGIN RETURN QUERY SELECT log_id, user_name, description, log_ts FROM logs WHERE user_name = param_ ENDE; $$ SPROG 'plpgsql' STABIL; 
Lad os nu se, hvordan man skriver funktioner med Python.

Skrivefunktioner med Python
Python er et ret rent programmeringssprog, som har et stort antal biblioteker til rådighed.
PostgreSQL er den eneste databasemotor, der giver dig mulighed for at bruge Python til at bygge funktioner.

For at få mulighed for at oprette funktioner med Python, skal vi først sikre os, at vi har sproget installeret på vores server. Når vi ved, at vi har det installeret, skal vi aktivere udvidelserne inden for PostgreSQL ved hjælp af følgende kommandoer:

 Opret udvidelse plpython2u; Opret udvidelse plpython3u; 
Vi skal sikre os, at Python er i gang, før udvidelserne aktiveres for at undgå fejl.

Grundlæggende funktioner med Python
Når vi har aktiveret alt for at kunne bruge Python, skal vi begynde at opbygge vores funktion, det er vigtigt at vide, at PostgreSQL kan konvertere sine datatyper til Python -datatyper og omvendt. PL / Python er endda i stand til at returnere arrays og sammensatte typer.

Lad os se nedenfor en funktion, der udfører en tekstsøgning i en online ressource, noget der ikke kunne gøres med PL / pgSQL, i det følgende billede vil vi se koden, og derefter vil vi lave den tilsvarende forklaring.

  • Vi importerer de biblioteker, vi skal bruge.
  • Vi foretager websøgningen ved at sammenkæde brugerens inputparametre.
  • Vi læser svaret og gemmer det i en HTML -fil kaldet raw_html.
  • Vi gemmer den del af HTML, der starter med og slutter inden starten af.
  • Vi fjerner HTML -tags og mellemrum og gemmer variablen kaldet resultat igen.
  • Vi returnerer det endelige resultat.
  • En anden interessant funktion ved at bruge Python er, at vi kan interagere direkte med operativsystemet, lad os se en funktion, der laver en telefonbogsliste, det skal bemærkes, at dette skal være oprettet af en superbruger:
 OPRET ELLER ERSTAT FUNKTION list_incoming_files () RETURNER SETOF tekst AS $$ import os return os.listdir ('/ indkommende') $$ SPROG 'plpython2u' VOLATILE SECURITY DEFINER;
Hvad er brugen af ​​dette? Vi kan spørge os selv, for forestil dig, at vi vil konsultere de filer, vi har til rådighed i et system, opkaldet til funktionen ville være sådan her:
 VÆLG filnavn FRA list_incoming_files () Som filnavn HVOR filnavn ILIKE '% .csv'
Med dette afslutter vi denne vejledning, vi håndterer allerede oprettelsen af ​​funktioner på andre sprog på PostgreSQL, som giver os et uendeligt felt, når det kommer til at opfylde vores krav.

wave wave wave wave wave