PostgreSQL - Funktionen

Wie in den meisten Datenbanken können wir eine Reihe von Sätzen verketten SQL und behandeln sie als Einheit eines Funktionsblocks; die verschiedenen Datenbanken beschreiben diesen Vorgang mit unterschiedlichen Namen, gespeicherten Prozeduren, Modulen, Makros usw.

In PostgreSQL sie werden Funktionen genannt. Neben der Vereinheitlichung mehrerer SQL-Anweisungen geben uns diese Funktionen auch die Möglichkeit, SQL-Anweisungen mit prozeduralen Sprachen (PL) auszuführen.

In PostgreSQL Dafür haben wir mehrere Möglichkeiten und die Möglichkeit, diese zu erweitern.

1. PostgreSQL-Funktionen


Anatomie einer Funktion
Unabhängig von der Sprache, die zum Schreiben der Funktionen verwendet wird, haben sie eine Struktur, diese Struktur kann wie folgt synthetisiert werden:
 FUNKTION ERSTELLEN ODER ERSETZEN func_name (arg1_arg1datatype) RETURNS some_type / setoff sometype / TABLE / (…) / AS $$ BODY off function $$ LANGUAGE language_of_function
Wenn wir beschreiben, was wir sehen, ist es ganz einfach, FUNKTION ERSTELLEN ODER ERSETZEN ist die Funktionserstellungsklausel, func_name ist der Name, den arg1 haben wird, ist der Parameter, den es empfangen wird, und arg1_datatype ist der Datentyp, der dieser Parameter ist, d. h., wenn es eine Ganzzahl, ein String usw. ist. In KEHRT ZURÜCK Wir geben das Ergebnis unserer Funktion zurück, $$ ist der Anfang des Blocks, der dem Hauptteil der Funktion weichen wird und endet dann mit $$ und schließlich SPRACHE ermöglicht es uns, die Sprache anzugeben, in der die Funktion geschrieben ist.

Es ist eine gut definierte und gut lesbare Struktur, so dass wir keine Probleme haben sollten, unsere Funktionen zu erstellen.

Funktionen schreiben mit SQL
Schreiben Sie die Funktionen mit SQL Es ist ziemlich einfach und schnell, es besteht darin, unsere SQL-Anweisungen im Grunde zu nehmen und die Kopf- und Fußzeile der Funktionen hinzuzufügen, und wir sind fertig.

Wie alles andere geht dies jedoch mit einigen Opfern einher, zum Beispiel verlieren wir die Flexibilität, dass wir, wenn wir mit einer anderen Sprache arbeiten könnten, um mehr Zweige der bedingten Ausführungskontrolle zu erstellen, nicht mehr als eine SQL-Anweisung haben können, obwohl dies behoben werden kann mit verschiedenen Methoden.

Der größte Vorteil ist, dass da SQL der Scheduler ist PostgreSQL ermöglicht es uns, die Indizes zu nutzen und so die Ausführung zu beschleunigen, andererseits wird die Funktion bei anderen Sprachen immer eine Blackbox sein

Schauen wir uns nun eine mit SQL geschriebene Funktion an:

 FUNKTION ERSTELLEN ODER ERSETZEN ins_logs (param_user_name varchar, param_description text) RETURNS integer AS $$ INSERT INTO logs (user_name, description) VALUES ($ 1, $ 2) RETURNING log_id; $$ SPRACHE 'sql' FLÜCHTIG;
Wir sehen, dass wir der oben definierten Struktur folgen und am Ende im Abschnitt SPRACHE wir definieren die 'sql'-Klausel FLÜCHTIG Dass sie besitzt bedeutet, dass die Funktion bei jedem Aufruf etwas anderes zurückgeben kann, auch wenn sie dieselben Parameter erhält. Dann können wir unsere Funktion aufrufen:
 SELECT ins_logs ('lhsu', 'dies ist ein Test') As new_id;
Wir machen einen Satz AUSWÄHLEN, ist die Funktion aktiv und was zurückgibt, ist das, was wir erhalten. In diesem Fall sehen wir einen Wert, den wir new_id nennen und den die Funktion als log_id zurückgibt.
Wir können sogar eine Funktion verwenden, um eine Datensatzaktualisierung durchzuführen und einen void-Parameter wie in diesem Beispiel zurückzugeben:
 FUNKTION ERSTELLEN ODER ERSETZEN upd_logs (log_id integer, param_user_name varchar, param_description text) RETURNS void AS $$ UPDATE logs SET user_name = $ 2, description = $ 3, log_ts = CURRENT_TIMESTAMPWHERE log_id = $ 1; $$ LANGUAGE qATILE 'sql ' FLÜCHTIG '
Da es void ist, benötigen wir kein Empfängerfeld, daher führen wir es wie folgt aus:
 SELECT upd_logs (12, 'robe', 'Change to regina');
Hier sehen wir, dass wir den letzten Schritt von As new_id aus dem vorherigen Aufruf entfernt haben.
Damit beenden wir dieses Tutorial, wir können nun unsere Grundfunktionen in SQL, wodurch viele Aktivitäten erleichtert und vereinfacht werden, die wir möglicherweise innerhalb eines Programms oder Systems, das wir erstellen, benötigen.

2. PostgreSQL-Funktionen in anderen Sprachen


Eine der attraktivsten Funktionen von PostgreSQL ist nicht nur auf die SQL-Sprache beschränktDank des Ladens von Modulen können wir erweiterte Funktionalitäten integrieren, einschließlich der Möglichkeit, verschiedene Sprachen zum Erstellen von Funktionen zu verwenden, wodurch wir eine große Flexibilität durch bessere Generierungsfähigkeiten von Bedingungen und die den verschiedenen Sprachen innewohnenden Vorteile erreichen können.

Schreiben von Funktionen mit PL / pgSQL
In dem Moment, in dem wir feststellen, dass der SQL-Standard für die Abfragen, die wir in einer Funktion ausführen möchten, nicht ausreichend ist, können wir immer auf die Verwendung von PL / pgSQL zurückgreifen; Einer der Unterschiede und Verbesserungen gegenüber SQL besteht darin, dass lokale Variablen mit der DECLARE-Anweisung deklariert werden können, wir auch die Kontrolle über den Fluss haben und den Funktionsrumpf in einen BEGIN END-Block einschließen müssen.

Sehen wir uns ein Beispiel für eine in dieser Sprache geschriebene Funktion an:

 CREATE FUNCTION sel_logs_rt (param_user_name varchar) RETURNS TABLE (log_id int, user_name varchar (50), description text, log_ts timestamptz) AS $$ BEGIN RETURN QUERY SELECT log_id, user_name, description, log_ts FROM logs param_user_name =; ENDE; $$ SPRACHE 'plpgsql' STABIL; 
Sehen wir uns nun an, wie Sie mit Python Funktionen schreiben.

Funktionen schreiben mit Python
Python ist eine ziemlich saubere Programmiersprache, die über eine große Anzahl von Bibliotheken verfügt.
PostgreSQL ist die einzige Datenbank-Engine, mit der Sie Python zum Erstellen von Funktionen verwenden können.

Um die Möglichkeit zu erhalten, mit Python Funktionen zu erstellen, müssen wir zunächst sicherstellen, dass wir die Sprache auf unserem Server installiert haben. Sobald wir wissen, dass wir es installiert haben, müssen wir die Erweiterungen in PostgreSQL mit den folgenden Befehlen aktivieren:

 ERWEITERUNG ERSTELLEN plpython2u; ERWEITERUNG ERSTELLEN plpython3u; 
Wir müssen sicherstellen, dass Python betriebsbereit ist, bevor wir die Erweiterungen aktivieren, um Fehler zu vermeiden.

Grundfunktionen mit Python
Sobald wir alles aktiviert haben, um Python verwenden zu können, werden wir mit dem Erstellen unserer Funktion beginnen. Es ist wichtig zu wissen, dass PostgreSQL seine Datentypen in Python-Datentypen konvertieren kann und umgekehrt. PL / Python kann sogar Arrays und zusammengesetzte Typen zurückgeben.

Sehen wir uns unten eine Funktion an, die eine Textsuche in einer Online-Ressource durchführt, was mit PL / pgSQL nicht möglich war. Im folgenden Bild sehen wir den Code und führen dann die entsprechende Erklärung durch.

  • Wir importieren die Bibliotheken, die wir verwenden werden.
  • Wir führen die Websuche durch, indem wir die Eingabeparameter des Benutzers verketten.
  • Wir lesen die Antwort und speichern sie in einer HTML-Datei namens raw_html.
  • Wir speichern den Teil des HTML, der mit beginnt und vor dem Anfang von endet.
  • Wir entfernen die HTML-Tags und Leerzeichen und speichern die Variable namens result erneut.
  • Wir geben das Endergebnis zurück.
  • Ein weiteres interessantes Merkmal der Verwendung von Python ist, dass wir direkt mit dem Betriebssystem interagieren können. Sehen wir uns eine Funktion an, die eine Verzeichnisliste erstellt. Es sollte beachtet werden, dass dies von einem Superuser erstellt werden muss:
 ERSTELLEN ODER ERSETZEN FUNKTION list_incoming_files () RETURNS SETOF text AS $$ import os return os.listdir ('/eingang') $$ LANGUAGE 'plpython2u' VOLATILE SECURITY DEFINER;
Was nützt das? Wir können uns fragen, denn stellen Sie sich vor, wir möchten die Dateien konsultieren, die wir in einem System zur Verfügung haben, der Aufruf der Funktion würde etwa so aussehen:
 SELECT Dateiname FROM list_incoming_files () Als Dateiname WHERE Dateiname ILIKE '% .csv'
Damit beenden wir dieses Tutorial, wir behandeln bereits die Erstellung von Funktionen in anderen Sprachen in PostgreSQL, was uns ein unendliches Feld zur Erfüllung unserer Anforderungen eröffnet.

Sie werden die Entwicklung der Website helfen, die Seite mit Ihren Freunden teilen

wave wave wave wave wave