ПостгреСКЛ - Функције

Као и у већини база података, можемо у низу уврстити низ реченица СКЛ и третирати их као јединицу функционалног блока; различите базе података описују ову операцију са различитим именима, ускладиштеним процедурама, модулима, макроима итд.

Ин ПостгреСКЛ зову се функције. Осим што обједињују неколико СКЛ израза, ове функције нам такође дају могућност извршавања СКЛ израза користећи процедуралне језике (ПЛ).

Ин ПостгреСКЛ имамо више могућности за ово и могућност да их проширимо.

1. ПостгреСКЛ функције


Анатомија функције
Без обзира на језик који се користи за писање функција, они имају структуру, ова структура се може синтетизирати са сљедећим:
 ЦРЕАТЕ ОР РЕПЛАЦЕ ФУНЦТИОН фунц_наме (арг1_арг1дататипе) ПОВРАТАК соме_типе / сетофф сометипе / ТАБЛЕ / (…) / АС $$ БОДИ офф функција $$ ЛАНГУАГЕ лангуаге_оф_фунцтион
Ако опишемо оно што видимо, сасвим је једноставно, НАПРАВИ ИЛИ ЗАМЕНИ ФУНКЦИЈУ је клаузула о креирању функције, фунц_наме је име које ће арг1 имати је параметар који ће примити, а арг1_дататипе је тип података који је поменути параметар, то јест, ако је цео број, низ итд. Ин ПОВРАТАК Враћамо резултат наше функције, $$ је почетак блока који ће уступити тело те функције, а затим завршава исто са $$ и на крају ЈЕЗИК омогућава нам да одредимо језик на коме је функција написана.

То је добро дефинисана и прилично читљива структура па не бисмо требали имати проблема при креирању наших функција.

Писање функција са СКЛ -ом
Напишите функције помоћу СКЛ Прилично је једноставно и брзо, потребно је у основи узети наше СКЛ изјаве и додати им заглавље и подножје функција и завршили смо.

Међутим, као и све остало, ово долази по цену одређених одрицања, на пример губимо флексибилност да, ако бисмо могли да радимо са другим језиком како бисмо створили више грана контроле условног извршења, не можемо имати више од једног СКЛ израза, иако се то може исправити користећи различите методе.

Највећа предност је то што је СКЛ планер ПостгреСКЛ омогућава нам да искористимо индексе и тако убрзамо његово извршавање, с друге стране са другим језицима функција ће увек бити црна кутија

Погледајмо сада функцију написану помоћу СКЛ -а:

 ЦРЕАТЕ ОР РЕПЛАЦЕ ФУНЦТИОН инс_логс (парам_усер_наме варцхар, парам_десцриптион тект) ПОВРАТИ цео број АС $$ ИНСЕРТ ИНТО логс (усер_наме, десцриптион) ВАЛУЕС ($ 1, $ 2) РЕТУРНИНГ лог_ид; $$ ЛАНГУАГЕ 'скл' ВОЛАТИЛЕ;
Видимо да пратимо горе дефинисану структуру и на крају одељка ЈЕЗИК дефинишемо 'скл' клаузулу ВОЛАТИЛЕ То што поседује значи да функција може да врати нешто другачије при сваком упућеном позиву, чак и ако прими исте параметре. Затим за позивање наше функције можемо користити:
 СЕЛЕЦТ инс_логс ('лхсу', 'ово је тест') Као нев_ид;
Правимо реченицу СЕЛЕЦТ, функција је активна и оно што враћа је оно што ћемо примити и у овом случају ћемо видети вредност коју називамо нев_ид и коју функција враћа као лог_ид.
Можемо чак користити функцију за ажурирање записа и враћање параметра воид као у овом примеру:
 ЦРЕАТЕ ОР РЕПЛАЦЕ ФУНЦТИОН упд_логс (лог_ид интегер, парам_усер_наме варцхар, парам_десцриптион тект) РЕТУРНС воид АС $$ УПДАТЕ логс СЕТ усер_наме = $ 2, десцриптион = $ 3, лог_тс = ЦУРРЕНТ_ТИМЕСТАМПВХЕРЕ лог_ид = $ 1; скл 'ЛАНГУАГЕ' „ВОЛАТИЛНО“
Пошто смо ништавни, не треба нам поље пријемника, па га извршавамо на следећи начин:
 СЕЛЕЦТ упд_логс (12, 'робе', 'Цханге то регина');
Овде можемо видети да смо из претходног позива уклонили последњи корак Ас нев_ид.
Овим смо завршили овај водич, сада можемо обављати наше основне функције у СКЛ, олакшавајући и поједностављујући многе активности које ће нам можда требати у оквиру програма или система који градимо.

2. ПостгреСКЛ функције на другим језицима


Једна од најатрактивнијих карактеристика ПостгреСКЛ је да није ограничен само на СКЛ језикЗахваљујући учитавању модула, можемо изабрати укључивање напредних функционалности, укључујући могућност кориштења различитих језика за изградњу функција, чиме можемо постићи велику флексибилност користећи боље могућности генерирања увјета и предности својствене различитим језицима.

Писање функција са ПЛ / пгСКЛ
У тренутку када приметимо да СКЛ стандард недостаје за упите које желимо да изведемо у функцији, увек можемо прибећи употреби ПЛ / пгСКЛ; једна од његових разлика и побољшања у односу на СКЛ је та што се локалне променљиве могу декларисати помоћу израза ДЕЦЛАРЕ, такође можемо имати контролу над током и морамо тело функције затворити у блок БЕГИН ЕНД.

Погледајмо пример функције написане на овом језику:

 ЦРЕАТЕ ФУНЦТИОН сел_логс_рт (парам_усер_наме варцхар) ПОВРАТАК ТАБЕЛЕ (лог_ид инт, усер_наме варцхар (50), тект десцриптион, лог_тс тиместамптз) АС $$ БЕГИН РЕТУРН КУЕРИ СЕЛЕЦТ лог_ид, усер_наме, десцриптион, лог_тс ФРОМ_наме; КРАЈ; $$ ЛАНГУАГЕ 'плпгскл' СТАБЛЕ; 
Хајде сада да видимо како се пишу функције помоћу Питхона.

Писање функција помоћу Питхона
Питхон је прилично чист програмски језик који има на располагању велики број библиотека.
ПостгреСКЛ је једини механизам базе података који вам омогућава да користите Питхон за изградњу функција.

Да бисмо добили могућност креирања функција помоћу Питхона, прво морамо да се уверимо да имамо језик инсталиран на нашем серверу. Када сазнамо да смо га инсталирали, морамо омогућити проширења унутар ПостгреСКЛ -а помоћу следећих команди:

 ЦРЕАТЕ ЕКСТЕНСИОН плпитхон2у; ЦРЕАТЕ ЕКСТЕНСИОН плпитхон3у; 
Морамо се уверити да је Питхон покренут пре него што омогућимо проширења како бисмо избегли грешке.

Основне функције са Питхоном
Када активирамо све да бисмо могли да користимо Питхон, почећемо са изградњом наше функције, важно је знати да ПостгреСКЛ може претворити своје типове података у Питхон типове података и обрнуто. ПЛ / Питхон чак може да врати низове и сложене типове.

Погледајмо испод функцију која врши претраживање текста у мрежном ресурсу, нешто што се не може урадити са ПЛ / пгСКЛ, на следећој слици ћемо видети код, а затим ћемо урадити одговарајуће објашњење.

  • Увозимо библиотеке које ћемо користити.
  • Веб претрагу вршимо повезивањем улазних параметара корисника.
  • Прочитали смо одговор и сачували га у ХТМЛ датотеци која се зове рав_хтмл.
  • Сачувамо део ХТМЛ -а који почиње и завршава пре почетка.
  • Уклонили смо ХТМЛ ознаке и размаке и поново сачували променљиву која се зове резултат.
  • Враћамо коначни резултат.
  • Још једна занимљива карактеристика коришћења Питхон -а је та што можемо директно да комуницирамо са оперативним системом, да видимо функцију која прави списак директоријума, треба напоменути да ово мора да креира суперкорисник:
 ЦРЕАТЕ ОР РЕПЛАЦЕ ФУНЦТИОН лист_инцоминг_филес () ПОВРАТАК СЕТОФ текста КАО $$ импорт ос ретурн ос.листдир ('/ инцоминг') $$ ЛАНГУАГЕ 'плпитхон2у' ДЕФИНЕР ВОЛАТИЛНЕ СИГУРНОСТИ;
Каква је корист од овога? Можемо се запитати, јер замислите да желимо да прегледамо датотеке које имамо на располагању у систему, позив функције би био отприлике овакав:
 СЕЛЕЦТ назив датотеке ФРОМ лист_инцоминг_филес () Као назив датотеке ВХЕРЕ назив датотеке ИЛИКЕ '% .цсв'
Овим завршавамо овај водич, већ се бавимо креирањем функција на другим језицима у ПостгреСКЛ, што нам даје бесконачно поље када је у питању испуњење наших захтева.

wave wave wave wave wave