Kaip ir daugelyje duomenų bazių, mes galime susieti eilutę sakinių SQL ir traktuokite juos kaip funkcinio bloko vienetą; skirtingos duomenų bazės apibūdina šią operaciją skirtingais pavadinimais, saugomomis procedūromis, moduliais, makrokomandomis ir kt.
In „PostgreSQL“ jie vadinami funkcijomis. Šios funkcijos, be kelių SQL sakinių suvienijimo, taip pat suteikia mums galimybę vykdyti SQL sakinius naudojant procedūrines kalbas (PL).
In „PostgreSQL“ mes turime daugybę variantų ir galimybę juos išplėsti.
1. „PostgreSQL“ funkcijos
Funkcijos anatomija
Nepriklausomai nuo kalbos, kuria rašomos funkcijos, jos turi struktūrą, šią struktūrą galima susintetinti taip:
KURTI AR PAKEISTI FUNKCIJĄ func_name (arg1_arg1datatype) Grąžina „some_type“ / „offoff“ tam tikrą tipą / „TABLE“ / (…) / AS $$ BODY off function $$ LANGUAGE language_of_functionJei aprašysime tai, ką matome, tai bus gana paprasta, KURTI AR PAKEISTI FUNKCIJĄ yra funkcijos kūrimo sąlyga, „func_name“ yra vardas, kurį arg1 turės, yra parametras, kurį jis gaus, o „arg1_datatype“ yra duomenų tipas, kuris yra minėtas parametras, tai yra, jei tai yra sveikas skaičius, eilutė ir pan. In GRĄŽINIMAI Mes grąžiname savo funkcijos rezultatą, $$ yra bloko, kuris užleis vietą funkcijai, pradžia ir pasibaigs tuo pačiu $ $ ir galiausiai KALBA leidžia mums nurodyti kalbą, kuria parašyta funkcija.
Tai gerai apibrėžta ir gana lengvai skaitoma struktūra, todėl neturėtume turėti problemų kurdami savo funkcijas.
Rašymo funkcijos naudojant SQL
Parašykite funkcijas naudodami SQL Tai gana paprasta ir greita, tai yra iš esmės paimti mūsų SQL teiginius ir pridėti funkcijų antraštę ir poraštę, ir mes baigsime.
Tačiau, kaip ir visa kita, tai kainuoja tam tikras aukas, pavyzdžiui, prarandame lankstumą, kad jei galėtume dirbti su kita kalba, kad sukurtume daugiau sąlyginio vykdymo kontrolės šakų, negalime turėti daugiau nei vieno SQL sakinio, nors tai galima ištaisyti naudojant įvairius metodus.
Didžiausias privalumas yra tai, kad SQL yra planuotojas „PostgreSQL“ leidžia mums pasinaudoti indeksais ir taip paspartinti jo vykdymą, kita vertus, su kitomis kalbomis funkcija visada bus juoda dėžutė
Dabar pažvelkime į funkciją, parašytą naudojant SQL:
KURTI AR PAKEISTI FUNKCIJAS ins_logs (parametro_vartotojo_vardas varchar, parametro_aprašo tekstas) Grąžina sveikąjį skaičių AS $$ INSERT INTO žurnalai (vartotojo_vardas, aprašymas) VERTĖS ($ 1, $ 2) RETURNING log_id; $$ LANGUAGE 'sql' VOLATILE;Matome, kad laikomės aukščiau apibrėžtos struktūros ir skyriaus pabaigoje KALBA mes apibrėžiame „sql“ sąlygą LAKYTAS Tai, kad ji priklauso, reiškia, kad funkcija gali sugrąžinti kažką kitokio su kiekvienu jai paskambintu skambučiu, net jei ji gauna tuos pačius parametrus. Tada, norėdami iškviesti savo funkciją, galime naudoti:
SELECT ins_logs ('lhsu', 'tai testas') Kaip new_id;Mes sudarome sakinį PASIRINKTI, funkcija yra aktyvi, o tai, ką grąžinsime, gausime, ir tokiu atveju pamatysime reikšmę, kurią vadiname new_id ir kurią funkcija grąžina kaip log_id.
Mes netgi galime naudoti funkciją, norėdami atnaujinti įrašą ir grąžinti tuščią parametrą, kaip parodyta šiame pavyzdyje:
KURTI AR PAKEISTI FUNKCIJĄ atnaujinimo_žurnalai (log_id sveikasis skaičius, param_user_name varchar, param_description text) RETURNS void AS AS $$ UPDATE logs SET user_name = $ 2, description = $ 3, log_ts = CURRENT_TIMESTAMPWHERE log_id = $ 1; $$ LANGUAL ' „KINTAMAS“Kadangi negalime, mums nereikia imtuvo lauko, todėl vykdome jį taip:
SELECT upd_logs (12, 'chalatas', 'Pakeisti į reginą');Čia matome, kad iš ankstesnio skambučio pašalinome paskutinį „As new_id“ veiksmą.
Baigę šią pamoką, dabar galime atlikti pagrindines funkcijas SQL, taip palengvindami ir supaprastindami daugelį veiklų, kurių mums gali prireikti kuriant programą ar sistemą.
2. „PostgreSQL“ funkcijos kitomis kalbomis
Vienas iš patraukliausių bruožų „PostgreSQL“ yra tai, kad ji neapsiriboja tik SQL kalbaĮkeldami modulius, galime pasirinkti integruoti pažangias funkcijas, įskaitant galimybę naudoti funkcijas skirtingomis kalbomis, o tai leidžia pasiekti didelį lankstumą naudojant geresnes sąlyginių sąlygų generavimo galimybes ir įvairioms kalboms būdingus pranašumus.
Rašymo funkcijos su PL / pgSQL
Kai pastebime, kad SQL standartas neatitinka užklausų, kurias norime atlikti funkcijoje, visada galime naudoti PL / pgSQL; vienas iš jo skirtumų ir patobulinimų, susijusių su SQL, yra tas, kad vietinius kintamuosius galima deklaruoti naudojant DECLARE sakinį, mes taip pat galime kontroliuoti srautą ir mes turime uždėti funkcijos turinį į BEGIN END bloką.
Pažiūrėkime šia kalba parašytos funkcijos pavyzdį:
KURTI FUNKCIJĄ sel_logs_rt (param_user_name varchar) RETURNS LENTELĖ (log_id int, user_name varchar (50), aprašymo tekstas, log_ts timestamptz) AS $$ BEGIN RETURN QUERY SELECT log_id, user_name, description, log_ts FROM logs WHER user_name GALAS; $$ KALBA 'plpgsql' STABLE;Dabar pažiūrėkime, kaip rašyti funkcijas naudojant „Python“.
Rašymo funkcijos naudojant „Python“
„Python“ yra gana švari programavimo kalba, kurioje yra daug bibliotekų.
„PostgreSQL“ yra vienintelis duomenų bazės variklis, leidžiantis naudoti funkcijas „Python“.
Kad galėtume sukurti funkcijas naudodami „Python“, pirmiausia turime įsitikinti, kad mūsų serveryje įdiegta kalba. Kai žinome, kad jį įdiegėme, turime įgalinti „PostgreSQL“ plėtinius naudodami šias komandas:
CREATE EXTENSION plpython2u; CREATE EXTENSION plpython3u;Prieš įjungdami plėtinius, turime įsitikinti, kad „Python“ veikia ir veikia, kad būtų išvengta klaidų.
Pagrindinės funkcijos su „Python“
Kai viskas bus suaktyvinta, kad galėtume naudoti „Python“, pradėsime kurti savo funkciją, svarbu žinoti, kad „PostgreSQL“ gali konvertuoti savo duomenų tipus į „Python“ duomenų tipus ir atvirkščiai. „PL / Python“ netgi gali grąžinti masyvus ir sudėtinius tipus.
Žemiau pamatysime funkciją, kuri atlieka teksto paiešką internetiniame šaltinyje, ko nepavyko padaryti naudojant PL / pgSQL, kitame paveikslėlyje pamatysime kodą ir atliksime atitinkamą paaiškinimą.
- Importuojame bibliotekas, kurias ketiname naudoti.
- Paiešką internete atliekame sujungdami vartotojo įvesties parametrus.
- Mes perskaitome atsakymą ir išsaugome jį HTML faile, vadinamame raw_html.
- Išsaugome HTML dalį, kuri prasideda ir baigiasi prieš prasidedant.
- Pašaliname HTML žymas ir tuščias vietas ir dar kartą išsaugome kintamąjį, vadinamą rezultatu.
- Mes grąžiname galutinį rezultatą.
- Kitas įdomus „Python“ naudojimo bruožas yra tas, kad mes galime tiesiogiai bendrauti su operacine sistema, pažiūrėkime funkciją, kuri sudaro katalogų sąrašą, reikia pažymėti, kad tai turi sukurti super vartotojas:
KURTI AR PAKEISTI FUNKCIJAS list_incoming_files () RETURNS SETOF text AS $$ import os return return os.listdir ('/ gaunamas') $$ LANGUAGE 'plpython2u' VOLATILE SECURITY DEFINER;Kokia tai nauda? Galime savęs paklausti, nes įsivaizduokite, kad norime peržiūrėti failus, kuriuos turime sistemoje, iškvietimas į šią funkciją būtų maždaug toks:
PASIRINKITE failo pavadinimą iš sąrašo_nueinantys_failai () Kaip failo pavadinimą KUR failo pavadinimas ILIKE '% .csv'Baigę šį vadovėlį, mes jau tvarkome funkcijų kūrimą kitomis kalbomis „PostgreSQL“, o tai suteikia mums begalinį lauką, kai reikia patenkinti mūsų reikalavimus.