PostgreSQL – Funktionen

Wie in den meisten Datenbanken können wir eine Reihe von SQL-Anweisungen verketten und als Einheit eines Funktionsblocks behandeln. Die verschiedenen Datenbanken beschreiben diesen Vorgang mit verschiedenen Namen, gespeicherten Prozeduren, Modulen, Makros usw.

In PostgreSQL heißen sie Funktionen. Neben der Vereinheitlichung mehrerer SQL-Anweisungen bieten diese Funktionen auch die Möglichkeit, SQL-Anweisungen in prozeduralen Sprachen (PL) auszuführen.

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

1. PostgreSQL-Funktionen

Anatomie einer Funktion

Unabhängig von der Sprache, in der die Funktionen geschrieben wurden, haben sie eine Struktur. Wir können diese Struktur folgendermaßen synthetisieren:

 CREATE OR REPLACE FUNCTION func_name ( arg1_arg1datatype) RETURNS some_type / setoff sometype / TABLE / (..) / AS $$ KÖRPER-AUS-Funktion $$ SPRACHE Sprache_der_Funktion 

Wenn wir beschreiben, was wir sehen, ist es ganz einfach: CREATE OR REPLACE FUNCTION ist die Erstellungsklausel der Funktion, func_name ist der Name, für den arg1 der zu empfangende Parameter ist, und arg1_datatype ist der Datentyp dieses Parameters, wenn dies der Fall ist eine ganze Zahl eine Kette usw. In RETURNS geben wir das Ergebnis unserer Funktion zurück. $$ ist der Anfang des Blocks, der dem Hauptteil der Funktion Platz macht, und endet dann gleich $$, und schließlich können wir mit LANGUAGE die Sprache angeben, in der die Funktion geschrieben ist.

Es ist eine gut definierte und gut lesbare Struktur, sodass wir keine Probleme beim Erstellen unserer Funktionen haben sollten.

Schreibfunktionen mit SQL

Das Schreiben der Funktionen mit SQL ist recht einfach und schnell. Grundsätzlich werden unsere SQL-Anweisungen verwendet und die Kopf- und Fußzeilen der Funktionen hinzugefügt, und wir sind bereit.

Dies geht jedoch wie alles andere zu Lasten einiger Opfer. Beispielsweise verlieren wir die Flexibilität, dass wir in der Lage wären, mit einer anderen Sprache bedingte Ausführungssteuerungszweige zu erstellen. Wir können jedoch nicht mehr als eine SQL-Anweisung haben, obwohl dies mithilfe von behoben werden kann verschiedene Methoden

See also  Verwendung von tcpdump zur Überwachung unseres Netzwerks

Der größte Vorteil ist, dass wir als SQL mit dem PostgreSQL- Scheduler die Vorteile der Indizes nutzen und auf diese Weise deren Ausführung beschleunigen können. Bei anderen Sprachen ist die Funktion jedoch immer eine Blackbox

Nun sehen wir uns eine mit SQL geschriebene Funktion an:

 CREATE OR REPLACE FUNCTION ins_logs (param_user_name varchar, param_description text) RETURNS Ganzzahl AS $$ INSERT INTO-Protokolle (user_name, description) VALUES ($ 1, $ 2) RETURNING log_id; $$ SPRACHE 'sql' VOLATILE; 

Wir sehen, dass wir der oben definierten Struktur folgen und am Ende des LANGUAGE- Abschnitts die VOLATILE- Klausel ‘sql’ definieren, die bedeutet, dass die Funktion bei jedem Aufruf etwas anderes zurückgeben kann, selbst wenn sie dieselben Parameter empfängt. Dann können wir zum Aufrufen unserer Funktion verwenden:

 SELECT ins_logs ('lhsu', 'das ist ein Test') As new_id; 

Wir machen eine SELECT-Anweisung , dies aktiviert die Funktion 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 ungültig AS $$ UPDATE logs SET user_name = $ 2, description = $ 3, log_ts = CURRENT_TIMESTAMPWHERE log_id = $ 1; $$ LANGUAGE 'sql' VOLATILE; 

Da wir kein Empfängerfeld benötigen, führen wir es folgendermaßen aus:

 SELECT upd_logs (12, 'robe', 'Change to regina'); 

Hier können wir sehen, dass wir den letzten Schritt von As new_id aus dem vorherigen Aufruf entfernt haben.
Nachdem wir dieses Tutorial fertiggestellt haben, können wir bereits unsere Grundfunktionen in SQL ausführen und auf diese Weise viele Aktivitäten vereinfachen und vereinfachen, die wir möglicherweise in einem Programm oder System benötigen, das wir erstellen.

2. PostgreSQL funktioniert in anderen Sprachen

Eine der attraktivsten Eigenschaften von PostgreSQL ist, dass es nicht auf die SQL-Sprache beschränkt ist. Dank des Ladens von Modulen können wir erweiterte Funktionen integrieren, einschließlich der Möglichkeit, Funktionen in verschiedenen Sprachen zu erstellen, wodurch wir eine große Flexibilität erzielen Verwendung besserer Funktionen zur bedingten Generierung und der damit verbundenen Vorteile verschiedener Sprachen.

Schreibfunktionen mit PL / pgSQL

Sobald wir feststellen, dass der SQL-Standard für die Abfragen, die wir in einer Funktion ausführen möchten, nicht mehr ausreicht, können wir uns jederzeit auf die Verwendung von PL / pgSQL berufen. Einer der Unterschiede und Verbesserungen in Bezug auf SQL besteht darin, dass Sie lokale Variablen mit der DECLARE-Anweisung deklarieren können. Außerdem können wir den Ablauf steuern und müssen den Hauptteil der Funktion in einen BEGIN END-Block einschließen.

See also  Erstellen und Hinzufügen von Titeln in Playlist Spotify Web und Mobile

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), Beschreibungstext, log_ts timestamptz) AS $$ BEGINNEN RÜCKGABE ABFRAGE SELECT log_id, benutzername, beschreibung, log_ts FROM logs WHERE benutzername = parambenutzername; END; $$ SPRACHE 'plpgsql' STABLE; 

Nun wollen wir sehen, wie man Funktionen mit Python schreibt.

Schreibfunktionen 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 haben, Funktionen mit Python zu erstellen, müssen wir zunächst sicherstellen, dass die Sprache auf unserem Server installiert ist. Sobald wir wissen, dass wir es installiert haben, müssen wir die Erweiterungen in PostgreSQL mit den folgenden Befehlen aktivieren:

 CREATE EXTENSION plpython2u; CREATE EXTENSION plpython3u; 

Wir müssen sicherstellen, dass Python läuft, bevor wir Erweiterungen aktivieren, um Fehler zu vermeiden.

Grundfunktionen mit Python

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

Nachfolgend sehen wir eine Funktion, die eine Textsuche in einer Online-Ressource durchführt, was mit PL / pgSQL nicht möglich war. In der folgenden Abbildung sehen wir den Code und geben dann die entsprechende Erklärung.

  • 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-Codes, der mit <! – docbot goes here -> beginnt und vor dem Start von <! – pgContentWrap -> endet.
  • Wir entfernen die HTML-Tags und die Leerzeichen und speichern die Variable result erneut.
  • Wir geben das Endergebnis zurück.
  • Eine weitere interessante Funktion von Python ist, dass wir direkt mit dem Betriebssystem interagieren können. Sehen wir uns eine Funktion an, die Verzeichnisse auflistet. Es sollte beachtet werden, dass dies von einem Superuser erstellt werden muss:
 CREATE OR REPLACE FUNCTION list_incoming_files () RETURNS SETOF Text AS $$ Importe return os.listdir ('/ incoming') $$ SPRACHE 'plpython2u' VOLATILE SECURITY DEFINER; 

Was ist der Nutzen davon? Wir können uns fragen, da wir uns vorstellen, die in einem System verfügbaren Dateien zu konsultieren, würde der Aufruf der Funktion ungefähr so ​​aussehen:

 SELECT filename FROM list_incoming_files () Als Dateiname WHERE filename ILIKE '% .csv' 

Damit wir dieses Tutorial abschließen, kümmern wir uns bereits um die Erstellung von Funktionen in anderen Sprachen in PostgreSQL , was uns ein unendliches Feld gibt, wenn es darum geht, unsere Anforderungen zu erfüllen.

See also  So installieren und konfigurieren Sie das ZFS-Ubuntu-Linux-Dateisystem

administrator

Leave a Reply

Your email address will not be published. Required fields are marked *