PostgreSQL - Funkcije

Kao i u većini baza podataka, možemo lančano povezati niz rečenica SQL i tretirati ih kao jedinicu funkcionalnog bloka; različite baze podataka opisuju ovu operaciju s različitim imenima, pohranjenim procedurama, modulima, makroima itd.

U PostgreSQL zovu se funkcije. Osim što objedinjuju nekoliko SQL izraza, ove nam funkcije daju i mogućnost izvođenja SQL izraza pomoću proceduralnih jezika (PL).

U PostgreSQL za to imamo više mogućnosti i mogućnost da ih proširimo.

1. PostgreSQL funkcije


Anatomija funkcije
Bez obzira na jezik koji se koristi za pisanje funkcija, one imaju strukturu, ta se struktura može sintetizirati sa sljedećim:
 CREATE OR REPLACE FUNCTION func_name (arg1_arg1datatype) POVRATAK some_type / setoff sometype / TABLE / (…) / AS $$ BODY off funkcija $$ LANGUAGE language_of_function
Ako opišemo ono što vidimo vrlo je jednostavno, IZRADI ILI ZAMJENI FUNKCIJU je klauzula o stvaranju funkcije, func_name je ime koje će arg1 imati je parametar koji će primiti, a arg1_datatype je tip podataka koji je navedeni parametar, odnosno ako je cijeli broj, niz itd. U POVRATAK Vraćamo rezultat naše funkcije, $$ je početak bloka koji će ustupiti tijelo funkcije, a zatim završava isto s $$ i na kraju JEZIK omogućuje nam da odredimo jezik na kojem je funkcija napisana.

To je dobro definirana i prilično čitljiva struktura pa ne bismo trebali imati problema s stvaranjem svojih funkcija.

Pisanje funkcija s SQL -om
Napišite funkcije pomoću SQL To je prilično jednostavno i brzo, potrebno je uzeti naše SQL izraze u osnovi i dodati im zaglavlje i podnožje funkcija i gotovi smo.

No, kao i sve ostalo, to dolazi pod cijenu određenih odricanja, na primjer gubimo fleksibilnost da, ako bismo mogli raditi s drugim jezikom za stvaranje više grana uvjetne kontrole izvođenja, ne možemo imati više od jednog SQL izraza, iako se to može popraviti koristeći razne metode.

Najveća prednost je ta što je SQL raspored PostgreSQL omogućuje nam da iskoristimo indekse i tako ubrzamo njegovo izvršavanje, s druge strane s drugim jezicima funkcija će uvijek biti crna kutija

Pogledajmo sada funkciju napisanu SQL -om:

 CREATE OR REPLACE FUNCTION ins_logs (param_user_name varchar, param_description text) POVRATI cijeli broj KAO $$ INSERT INTO zapisnike (user_name, description) VALUES ($ 1, $ 2) RETURNING log_id; $$ JEZIK 'sql' VOLATIL;
Vidimo da slijedimo gore definiranu strukturu i na kraju u odjeljku JEZIK definiramo 'sql' klauzulu PROSTORNO To što posjeduje znači da funkcija može vratiti nešto drugačije pri svakom upućenom pozivu, čak i ako primi iste parametre. Tada za pozivanje naše funkcije možemo upotrijebiti:
 SELECT ins_logs ('lhsu', 'ovo je test') Kao new_id;
Sastavimo rečenicu IZABERI, funkcija je aktivna i ono što vraća je ono što ćemo primiti i u ovom slučaju vidjet ćemo vrijednost koju nazivamo new_id i koju funkcija vraća kao log_id.
Čak možemo koristiti funkciju za ažuriranje zapisa i vraćanje parametra void kao u ovom primjeru:
 CREATE OR REPLACE FUNCTION upd_logs (log_id integer, param_user_name varchar, param_description text) POVRATAK void AS $$ UPDATE logs SET user_name = $ 2, description = $ 3, log_ts = CURRENT_TIMESTAMPWHERE log_id = $ 1; sql 'LANGUAGE' "VOLATILNO"
Budući da smo ništavni, ne treba nam polje primatelja, pa ga izvršavamo na sljedeći način:
 SELECT upd_logs (12, 'robe', 'Change to regina');
Ovdje možemo vidjeti da smo iz prethodnog poziva uklonili posljednji korak As new_id.
Ovim smo završili ovaj vodič, sada možemo obavljati svoje osnovne funkcije u SQL, olakšavajući i pojednostavljujući mnoge aktivnosti koje će nam možda trebati u okviru programa ili sustava koji gradimo.

2. PostgreSQL funkcionira na drugim jezicima


Jedna od najatraktivnijih značajki PostgreSQL je da nije ograničen samo na SQL jezikZahvaljujući učitavanju modula, možemo izabrati uključivanje naprednih funkcionalnosti, uključujući mogućnost korištenja različitih jezika za izgradnju funkcija, čime možemo postići veliku fleksibilnost korištenjem boljih mogućnosti generiranja uvjeta i prednosti svojstvenih različitim jezicima.

Pisanje funkcija s PL / pgSQL
U trenutku kada primijetimo da SQL standard nedostaje za upite koje želimo izvesti u funkciji, uvijek možemo pribjeći upotrebi PL / pgSQL; jedna od njegovih razlika i poboljšanja u odnosu na SQL je ta što se lokalne varijable mogu deklarirati pomoću izraza DECLARE, također možemo imati kontrolu nad tijekom i moramo tijelo funkcije zatvoriti u blok BEGIN END.

Pogledajmo primjer funkcije napisane na ovom jeziku:

 CREATE FUNCTION sel_logs_rt (param_user_name varchar) POVRATAK TABLE (log_id int, user_name varchar (50), text description, log_ts timestamptz) AS $$ BEGIN RETURN QUERY SELECT log_id, user_name, description, log_ts FROM_ime_korisnik_korisnik KRAJ; $$ LANGUAGE 'plpgsql' STABLE; 
Pogledajmo sada kako pisati funkcije s Pythonom.

Pisanje funkcija s Pythonom
Python je prilično čist programski jezik koji ima na raspolaganju veliki broj knjižnica.
PostgreSQL je jedini motor baze podataka koji vam omogućuje korištenje Pythona za izgradnju funkcija.

Kako bismo dobili mogućnost stvaranja funkcija s Pythonom, prvo se moramo uvjeriti da imamo jezik instaliran na našem poslužitelju. Nakon što znamo da smo ga instalirali, moramo omogućiti proširenja unutar PostgreSQL -a pomoću sljedećih naredbi:

 CREATE EXTENSION plpython2u; CREATE EXTENSION plpython3u; 
Moramo provjeriti radi li Python prije nego omogućimo proširenja kako bismo izbjegli pogreške.

Osnovne funkcije s Pythonom
Nakon što aktiviramo sve za korištenje Pythona, počet ćemo s izgradnjom naše funkcije, važno je znati da PostgreSQL može pretvoriti svoje vrste podataka u Python tipove podataka i obrnuto. PL / Python čak može vratiti nizove i složene tipove.

Pogledajmo u nastavku funkciju koja vrši pretraživanje teksta u mrežnom resursu, nešto što se ne može učiniti s PL / pgSQL, na sljedećoj slici vidjet ćemo kod, a zatim ćemo napraviti odgovarajuće objašnjenje.

  • Uvozimo knjižnice koje ćemo koristiti.
  • Web pretraživanje vršimo povezivanjem ulaznih parametara korisnika.
  • Čitamo odgovor i spremamo ga u HTML datoteku pod nazivom raw_html.
  • Spremamo dio HTML -a koji počinje i završava prije početka.
  • Uklanjamo HTML oznake i razmake te ponovno spremamo varijablu koja se zove rezultat.
  • Vraćamo konačni rezultat.
  • Još jedna zanimljiva značajka korištenja Pythona je ta što možemo izravno komunicirati s operativnim sustavom, pogledajmo funkciju koja čini popis direktorija, valja napomenuti da to mora stvoriti superkorisnik:
 CREATE OR REPLACE FUNCTION list_incoming_files () POVRATI SETOF tekst KAO $$ import os return os.listdir ('/ incoming') $$ LANGUAGE 'plpython2u' DEFINER VOLATILNE SIGURNOSTI;
Kakva je korist od ovoga? Možemo se zapitati, jer zamislite da želimo pregledati datoteke koje imamo na raspolaganju u sustavu, poziv funkcije bi bio otprilike ovakav:
 SELECT naziv datoteke FROM list_incoming_files () Kao naziv datoteke WHERE naziv datoteke ILIKE '% .csv'
Ovim smo završili ovaj vodič, već se bavimo stvaranjem funkcija na drugim jezicima u PostgreSQL, što nam daje beskonačno polje kada je u pitanju ispunjenje naših zahtjeva.

wave wave wave wave wave