PostgreSQL - funkcijas

Tāpat kā lielākajā daļā datu bāzu, mēs varam ķēdīt virkni teikumu SQL un uzskatīt tos par funkcionāla bloka vienību; dažādas datu bāzes apraksta šo darbību ar dažādiem nosaukumiem, saglabātajām procedūrām, moduļiem, makro utt.

In PostgreSQL tos sauc par funkcijām. Papildus vairāku SQL paziņojumu apvienošanai šīs funkcijas arī dod mums iespēju izpildīt SQL paziņojumus, izmantojot procesuālās valodas (PL).

In PostgreSQL mums ir vairākas iespējas un iespēja tās paplašināt.

1. PostgreSQL funkcijas


Funkcijas anatomija
Neatkarīgi no valodas, ko izmanto funkciju rakstīšanai, tām ir struktūra, šo struktūru var sintezēt ar sekojošo:
 IZVEIDOT VAI NOMAINIET FUNKCIJU func_name (arg1_arg1datatype) ATGRIEZ kaut kādu_tipu / ieskaitīt kaut kādu veidu / TABULA / (…) / AS $$ BODY izslēgšanas funkcija
Ja mēs aprakstām to, ko redzam, tas ir pavisam vienkārši, IZVEIDOT VAI Nomainiet FUNKCIJU ir funkcijas izveides klauzula, func_name ir nosaukums, ko arg1 saņems, tas ir parametrs, ko tas saņems, un arg1_datatype ir datu veids, kas ir minētais parametrs, tas ir, ja tas ir vesels skaitlis, virkne utt. In ATGRIEŽAS Mēs atgriežam savas funkcijas rezultātu, $$ ir bloka sākums, kas dos vietu funkcijas pamattekstam un pēc tam beidzas ar $$ un visbeidzot VALODA ļauj mums norādīt valodu, kādā funkcija ir rakstīta.

Tā ir labi definēta un diezgan lasāma struktūra, tāpēc mums nevajadzētu radīt problēmas, veidojot savas funkcijas.

Rakstīšanas funkcijas ar SQL
Uzrakstiet funkcijas, izmantojot SQL Tas ir diezgan vienkārši un ātri, tas ir, būtībā ņemt mūsu SQL paziņojumus un pievienot tam galveni un kājeni, un mēs esam pabeiguši.

Tomēr, tāpat kā viss pārējais, tas maksā par dažiem upuriem, piemēram, mēs zaudējam elastību - ja mēs varētu strādāt ar citu valodu, lai izveidotu vairāk nosacītas izpildes kontroles zaru, mums nevar būt vairāk par vienu SQL paziņojumu, lai gan to var labot izmantojot dažādas metodes.

Lielākā priekšrocība ir tā, ka, tā kā SQL ir plānotājs PostgreSQL ļauj mums izmantot indeksu priekšrocības un tādējādi paātrināt tā izpildi, no otras puses, ar citām valodām funkcija vienmēr būs melnā kaste

Tagad apskatīsim funkciju, kas rakstīta ar SQL:

 IZVEIDOT VAI Nomainiet FUNKCIJU ins_logs (parametra_lietotāja_vārds varchar, parametra_apraksta teksts) ATGRIEŽ vesels skaitlis KĀ $$ IEVIETOT žurnālos (lietotāja_vārds, apraksts) VĒRTĪBAS (1 ASV dolārs, 2 ASV dolāri) ATGRIEŠANA log_id; $$ VALODA 'sql' VOLATILE;
Mēs redzam, ka mēs ievērojam iepriekš definēto struktūru un sadaļas beigās VALODA mēs definējam “sql” klauzulu GAIDĪGS Tas, ka tas pieder, nozīmē, ka funkcija var atgriezt kaut ko citu ar katru tai veikto zvanu, pat ja tā saņem tos pašus parametrus. Tad, lai izsauktu savu funkciju, mēs varam izmantot:
 SELECT ins_logs ('lhsu', 'tas ir tests') Kā new_id;
Mēs izveidojam teikumu SELECT, funkcija ir aktīva, un tas, ko atgriež, ir tas, ko mēs saņemsim, un šajā gadījumā mēs redzēsim vērtību, ko mēs saucam par new_id un kuru funkcija atgriež kā log_id.
Mēs pat varam izmantot funkciju, lai atjauninātu ierakstu un atgrieztu tukšu parametru, piemēram, šajā piemērā:
 IZVEIDOT VAI NOMAINĪT FUNKCIJU atjauninājumu žurnāli (log_id vesels skaitlis, parametra_lietotāja_vārds varchar, parametra apraksta teksts) RETURNS void AS $$ UPDATE žurnāli SET user_name = $ 2, description = $ 3, log_ts = CURRENT_TIMESTAMPWHERE log_id = $ 1; $$ LANGUAL ' "VATATILE"
Tā kā mēs neesam tukši, mums nav nepieciešams uztvērēja lauks, tāpēc mēs to izpildām šādi:
 SELECT upd_logs (12, 'halāts', 'Mainīt uz regīnu');
Šeit mēs redzam, ka no iepriekšējā zvana tika noņemts pēdējais posms As new_id.
Pabeidzot šo apmācību, mēs tagad varam veikt savas pamatfunkcijas SQL, tādējādi atvieglojot un vienkāršojot daudzas aktivitātes, kas mums varētu būt vajadzīgas mūsu veidotajā programmā vai sistēmā.

2. PostgreSQL funkcijas citās valodās


Viena no pievilcīgākajām iezīmēm PostgreSQL ir tas, ka tas neaprobežojas tikai ar SQL valoduPateicoties moduļu ielādei, mēs varam izvēlēties iekļaut uzlabotas funkcijas, tostarp iespēju izmantot dažādas valodas funkciju veidošanai, tādējādi mēs varam sasniegt lielu elastību, izmantojot labākas nosacījumu ģenerēšanas iespējas un dažādām valodām piemītošās priekšrocības.

Rakstīšanas funkcijas ar PL / pgSQL
Brīdī, kad pamanām, ka SQL standarts neatbilst vaicājumiem, kurus vēlamies veikt kādā funkcijā, mēs vienmēr varam izmantot PL / pgSQL; viena no tās atšķirībām un uzlabojumiem attiecībā uz SQL ir tāda, ka vietējos mainīgos var deklarēt, izmantojot DECLARE paziņojumu, mēs varam arī kontrolēt plūsmu, un mums ir jāiekļauj funkcijas pamatteksts BEGIN END.

Apskatīsim šajā valodā uzrakstītas funkcijas piemēru:

 CREATE FUNCTION sel_logs_rt (param_user_name varchar) ATGRIEŠANAS TABULA (log_id int, user_name varchar (50), apraksta teksts, log_ts timestamptz) AS $$ BEGIN RETURN QUERY SELECT log_id, user_name, description, log_ts FROM logs WHER user_name END; $$ VALODA 'plpgsql' STABILS; 
Tagad redzēsim, kā rakstīt funkcijas, izmantojot Python.

Rakstīšanas funkcijas, izmantojot Python
Python ir diezgan tīra programmēšanas valoda, kurai ir pieejams liels skaits bibliotēku.
PostgreSQL ir vienīgais datu bāzes dzinējs, kas ļauj funkciju izveidei izmantot Python.

Lai iegūtu iespēju izveidot funkcijas ar Python, mums vispirms jāpārliecinās, vai mūsu serverī ir instalēta valoda. Kad mēs zinām, ka mums tas ir instalēts, mums ir jāiespējo paplašinājumi PostgreSQL, izmantojot šādas komandas:

 CREATE EXTENSION plpython2u; CREATE EXTENSION plpython3u; 
Pirms paplašinājumu iespējošanas mums jāpārliecinās, ka Python ir izveidots un darbojas, lai izvairītos no kļūdām.

Pamatfunkcijas ar Python
Kad viss ir aktivizēts, lai varētu izmantot Python, mēs sāksim veidot savu funkciju, ir svarīgi zināt, ka PostgreSQL var pārvērst savus datu tipus par Python datu tipiem un otrādi. PL / Python pat spēj atgriezt masīvus un saliktos veidus.

Tālāk redzēsim funkciju, kas veic teksta meklēšanu tiešsaistes resursā, kaut ko tādu, ko nevarēja izdarīt ar PL / pgSQL, nākamajā attēlā mēs redzēsim kodu un pēc tam darīsim atbilstošu skaidrojumu.

  • Mēs importējam bibliotēkas, kuras mēs izmantosim.
  • Mēs veicam meklēšanu tīmeklī, savienojot lietotāja ievades parametrus.
  • Mēs lasām atbildi un saglabājam to HTML failā ar nosaukumu raw_html.
  • Mēs saglabājam to HTML daļu, kas sākas ar un beidzas pirms tā sākuma.
  • Mēs noņemam HTML tagus un atstarpes un vēlreiz saglabājam mainīgo, ko sauc par rezultātu.
  • Atgriežam gala rezultātu.
  • Vēl viena interesanta Python lietošanas iezīme ir tā, ka mēs varam tieši mijiedarboties ar operētājsistēmu, redzēsim funkciju, kas izveido direktoriju sarakstu, jāatzīmē, ka tas ir jāizveido superlietotājam:
 IZVEIDOT VAI Nomainīt FUNKCIJAS list_incoming_files () ATGRIEŽ SETOF tekstu AS $$ importēt os return os.listdir ('/ ienākošais') $$ VALODA 'plpython2u' VOLATILE DROŠĪBAS DEFINER;
Kāda ir šī izmantošana? Mēs varam sev jautāt, jo iedomājieties, ka vēlamies iepazīties ar failiem, kas mums ir pieejami sistēmā, šīs funkcijas izsaukums būtu aptuveni šāds:
 IZVĒLĒTIES faila nosaukumu NO list_incoming_files () Kā faila nosaukumu WHERE faila nosaukums ILIKE '% .csv'
Ar to mēs pabeidzam šo apmācību, mēs jau apstrādājam funkciju izveidi citās valodās PostgreSQL, kas dod mums bezgalīgu lauku, kad runa ir par mūsu prasību izpildi.

wave wave wave wave wave