PostgreSQL - Funkcje

Jak w większości baz danych, możemy łączyć serię zdań SQL i traktować je jako jednostkę bloku funkcjonalnego; różne bazy danych opisują tę operację różnymi nazwami, procedurami składowanymi, modułami, makrami itp.

w PostgreSQL nazywane są funkcjami. Oprócz ujednolicenia kilku instrukcji SQL, funkcje te dają nam również możliwość wykonywania instrukcji SQL przy użyciu języków proceduralnych (PL).

w PostgreSQL mamy na to wiele opcji i możliwość ich rozszerzenia.

1. Funkcje PostgreSQL


Anatomia funkcji
Niezależnie od języka użytego do napisania funkcji, mają one strukturę, strukturę tę można zsyntetyzować za pomocą:
 UTWÓRZ LUB ZAMIEŃ FUNKCJĘ func_name (arg1_arg1datatype) ZWRACA some_type / setoff sometype / TABLE / (…) / AS $$ BODY off function $$ LANGUAGE language_of_function
Jeśli opiszemy to, co widzimy, jest to dość proste, FUNKCJA UTWÓRZ LUB ZAMIEŃ to klauzula tworzenia funkcji, func_name to nazwa, którą arg1 będzie miał to parametr, który otrzyma, a arg1_datatype to typ danych, który jest wspomnianym parametrem, to znaczy, czy jest to liczba całkowita, łańcuch itp. w ZWROTY Zwracamy wynik naszej funkcji, $$ jest początkiem bloku, który ustąpi ciału funkcji, a następnie kończy się tak samo przez $$ i na koniec JĘZYK pozwala nam określić język, w którym napisana jest funkcja.

Jest to dobrze zdefiniowana i dość czytelna struktura, więc nie powinniśmy mieć problemów z tworzeniem naszych funkcji.

Pisanie funkcji za pomocą SQL
Napisz funkcje za pomocą SQL Jest to dość łatwe i szybkie, wystarczy wziąć nasze instrukcje SQL i dodać do nich nagłówek i stopkę funkcji i gotowe.

Jednak, jak wszystko inne, odbywa się to kosztem pewnych wyrzeczeń, na przykład tracimy elastyczność, że gdybyśmy mogli pracować z innym językiem, aby utworzyć więcej gałęzi warunkowej kontroli wykonania, nie możemy mieć więcej niż jednej instrukcji SQL, chociaż można temu zaradzić przy użyciu różnych metod.

Największą zaletą jest to, że skoro SQL jest harmonogramem PostgreSQL pozwala nam skorzystać z indeksów i tym samym przyspieszyć jego wykonanie, natomiast przy innych językach funkcja zawsze będzie czarną skrzynką

Przyjrzyjmy się teraz funkcji napisanej w SQL:

 UTWÓRZ LUB ZAMIEŃ FUNKCJĘ ins_logs (param_user_name varchar, param_description text) ZWRACA liczbę całkowitą JAKO $$ WSTAW DO dzienników (nazwa_użytkownika, opis) WARTOŚCI (1 $, $ 2) POWRACAJĄC log_id; $$ JĘZYK 'sql' ZMIENNY;
Widzimy, że podążamy za strukturą zdefiniowaną powyżej i na końcu w sekcji JĘZYK definiujemy klauzulę 'sql' LOTNY To, że jest właścicielem, oznacza, że ​​funkcja może zwracać coś innego przy każdym wywołaniu do niej, nawet jeśli otrzymuje te same parametry. Następnie do wywołania naszej funkcji możemy użyć:
 SELECT ins_logs ('lhsu', 'to jest test') As new_id;
Tworzymy zdanie WYBIERZ, funkcja jest aktywna i zwraca to, co otrzymamy i w tym przypadku zobaczymy wartość, którą wywołamy new_id, a funkcja zwraca jako log_id.
Możemy nawet użyć funkcji do aktualizacji rekordu i zwrócenia parametru void, jak w tym przykładzie:
 UTWÓRZ LUB ZAMIEŃ FUNKCJĘ upd_logs (log_id integer, param_user_name varchar, param_description text) ZWRACA void AS $$ UPDATE logs SET user_name = 2 $, description = 3 $, log_ts = CURRENT_TIMESTAMPWHERE log_id = 1 $; ' LOTNY '
Będąc nieważnym nie potrzebujemy pola odbiorczego, więc wykonujemy je w następujący sposób:
 SELECT upd_logs (12, 'szata', 'Zmień na regina');
Tutaj widzimy, że usunęliśmy ostatni krok As new_id z poprzedniego wywołania.
Na tym kończymy ten samouczek, możemy teraz wykonywać nasze podstawowe funkcje w SQL, ułatwiając w ten sposób i upraszczając wiele czynności, których możemy potrzebować w ramach programu lub systemu, który budujemy.

2. Funkcje PostgreSQL w innych językach


Jedna z najbardziej atrakcyjnych funkcji PostgreSQL polega na tym, że nie ogranicza się tylko do języka SQLDzięki ładowaniu modułów możemy zdecydować się na włączenie zaawansowanych funkcjonalności, w tym możliwości korzystania z różnych języków do budowania funkcji, dzięki czemu możemy osiągnąć dużą elastyczność, korzystając z lepszych możliwości generowania warunków warunkowych i zalet tkwiących w różnych językach.

Pisanie funkcji za pomocą PL / pgSQL
W momencie, gdy zauważymy, że standard SQL nie spełnia zapytań, które chcemy wykonać w funkcji, zawsze możemy skorzystać z PL/pgSQL; jedną z jego różnic i ulepszeń w stosunku do SQL jest to, że zmienne lokalne można deklarować za pomocą instrukcji DECLARE, możemy również mieć kontrolę nad przepływem i musimy zamknąć ciało funkcji w bloku BEGIN END.

Zobaczmy przykład funkcji napisanej w tym języku:

 CREATE FUNCTION sel_logs_rt (param_user_name varchar) TABELA ZWROTÓW (log_id int, user_name varchar (50), tekst opisu, log_ts timestamptz) AS $$ BEGIN RETURN SELECT SELECT log_id, user_name, description, log_ts FROM logs WHERE user_name = param_ KONIEC; $$ JĘZYK 'plpgsql' STABILNY; 
Zobaczmy teraz, jak pisać funkcje w Pythonie.

Pisanie funkcji w Pythonie
Python jest dość czystym językiem programowania, który ma dużą liczbę dostępnych bibliotek.
PostgreSQL to jedyny silnik bazy danych, który pozwala używać Pythona do budowania funkcji.

Aby uzyskać możliwość tworzenia funkcji za pomocą Pythona musimy najpierw upewnić się, że mamy zainstalowany język na naszym serwerze. Gdy wiemy, że mamy go zainstalowany, musimy włączyć rozszerzenia w PostgreSQL za pomocą następujących poleceń:

 UTWÓRZ ROZSZERZENIE plpython2u; UTWÓRZ ROZSZERZENIE plpython3u; 
Aby uniknąć błędów, przed włączeniem rozszerzeń musimy upewnić się, że Python jest gotowy do działania.

Podstawowe funkcje w Pythonie
Gdy już wszystko zostanie aktywowane, aby móc używać Pythona, zaczniemy budować naszą funkcję, ważne jest, aby wiedzieć, że PostgreSQL może konwertować swoje typy danych na typy danych Pythona i odwrotnie. PL / Python potrafi nawet zwracać tablice i typy złożone.

Zobaczmy poniżej funkcję, która wykonuje wyszukiwanie tekstowe w zasobie online, coś, czego nie można było zrobić za pomocą PL / pgSQL, na poniższym obrazku zobaczymy kod, a następnie wykonamy odpowiednie wyjaśnienie.

  • Importujemy biblioteki, z których będziemy korzystać.
  • Przeszukujemy sieć, łącząc parametry wejściowe użytkownika.
  • Odczytujemy odpowiedź i zapisujemy ją w pliku HTML o nazwie raw_html.
  • Zapisujemy część kodu HTML, która zaczyna się i kończy przed początkiem.
  • Usuwamy tagi HTML i spacje i ponownie zapisujemy zmienną o nazwie wynik.
  • Zwracamy wynik końcowy.
  • Inną ciekawą cechą używania Pythona jest to, że możemy wchodzić w bezpośrednią interakcję z systemem operacyjnym, zobaczmy funkcję, która tworzy listę katalogów, należy zauważyć, że musi to być utworzone przez superużytkownika:
 FUNKCJA TWÓRZ LUB ZAMIEŃ list_incoming_files () ZWRACA SETOF tekst AS $$ import os powrót os.listdir ('/ przychodzące') $$ JĘZYK 'plpython2u' ZMIENNY DEFINER BEZPIECZEŃSTWA;
Jaki jest z tego pożytek? Możemy zadać sobie pytanie, bo wyobraźmy sobie, że chcemy sprawdzić pliki, które mamy dostępne w systemie, wywołanie funkcji wyglądałoby mniej więcej tak:
 SELECT nazwa pliku FROM list_incoming_files () Jako nazwa pliku WHERE nazwa pliku ILIKE '% .csv'
Na tym kończymy ten tutorial, już zajmujemy się tworzeniem funkcji w innych językach w PostgreSQL, co daje nam nieskończone pole do spełnienia naszych wymagań.

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave