PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Erstellen neuer Module mit PostgreSQL Create Extension

Einführung

Wie Sie vielleicht wissen, ist PostgreSQL auf Erweiterbarkeit und Anpassung ausgelegt, was bedeutet, dass wir die Funktionalität Ihrer Datenbank mithilfe von Erweiterungen erweitern können. Die Funktionalität der PostgreSQL-Erweiterung ermöglicht das Bündeln mehrerer SQL-Objekte in einem einzigen Paket, das in Ihre Datenbank geladen oder daraus entfernt werden kann. Sobald Sie es in Ihre Datenbank geladen haben, können Erweiterungen als integrierte Funktionen fungieren.

Die PostgreSQL-Datenbank hat viele Funktionen und bietet eine große Auswahl an Datentypen, Funktionen, Operatoren usw. Aber manchmal reicht es für einige Anwendungsfälle nicht aus. Wir können die Funktionalität von PostgreSQL einfach durch Erweiterungen erweitern. Dies ist eine sehr nützliche Funktion für Datenbankentwickler und -administratoren.

In diesem Blog können wir zwei Dinge weiter unten behandeln.

  1. Verwendung der von der PostgreSQL-Community unterstützten Erweiterung
  2. Erstellen und Verwenden von Erweiterungen in PostgreSQL

So verwenden Sie von der PostgreSQL-Community unterstützte Erweiterungen

Es gibt eine Reihe von Contrib-Modulen/Erweiterungen in PostgreSQL. Diese Module werden von der PostgreSQL-Community gepflegt. Wir können diese Module und ihre Funktionalität in PostgreSQL verwenden, indem wir eine Erweiterung erstellen.

Sehen wir uns an, wie die Funktionalität der hstore-Erweiterung in PostgreSQL verwendet wird.

Hstore-Erweiterung

Das Modul hstore implementiert den Datentyp hstore, der Schlüssel-Wert-Paare in einem einzigen Wert speichert. Wir können den hstore-Datentyp in vielen Fällen verwenden, z. B. bei halbstrukturierten Daten oder Zeilen mit vielen Attributen, die selten abgefragt werden. Beachten Sie, dass Schlüssel und Werte nur Textzeichenfolgen sind. Um diese Funktionalität nutzen zu können, müssen wir in PostgreSQL eine Erweiterung dafür erstellen.

Sehen wir uns an, wie der hstore-Datentyp verwendet wird.

CREATE TABLE books (
 book_code serial primary key,
 book_title VARCHAR (20),
 attr hstore
);

Bevor Sie den hstore-Datentyp erstellen, müssen Sie die hstore-Erweiterung aktivieren, die das contrib-Modul in Ihr PostgreSQL lädt.

CREATE EXTENSION hstore;

Es gibt verschiedene hstore-Funktionen, um Daten aus der Datenbank abzurufen. Sie können die Funktionen und Beispiele hier überprüfen.

Bitte überprüfen Sie die zusätzlich mitgelieferten Module in PostgreSQL.

So erstellen Sie eine Erweiterung

Erweiterbarkeit ist eine der leistungsfähigsten Funktionen in PostgreSQL. Sie können neue Funktionen für einen bestimmten Anwendungsfall hinzufügen, indem Sie das contrib-Modul verwenden und es mit CREATE EXTENSION installieren.

In diesem Abschnitt werden wir lernen, wie man ein einfaches Contrib-Modul erstellt und wie man seine Funktionalität in PostgreSQL verwendet.

Erweiterungsdateien

Um den Befehl CREATE EXTENSION in Ihrer Datenbank ausführen zu können, muss Ihre Erweiterung mindestens zwei Dateien benötigen:

  1. Kontrolldatei
    Das Dateiformat muss extension_name.control sein, das die Grundlagen der Erweiterung zu PostgreSQL mitteilt, und muss im Verzeichnis SHAREDIR/extension der Installation abgelegt werden.
  2. SQL-Skriptdatei
    Die Datei in der Formaterweiterung --version.sql enthält die Funktionen, die Sie hinzufügen möchten.

Das Dateiformat der Steuerdatei in der Erweiterung ist das gleiche wie in der postgresql.conf-Datei, nämlich eine Liste von parameter_name =Wertzuweisungen, eine pro Zeile.

Beispiel

Bitte überprüfen Sie das folgende vollständige Beispiel einer Nur-SQL-Erweiterung, erstellen Sie eine Oracle-kompatible NVL-Funktion in PostgreSQL. Es gibt viele Fälle, aber hier können wir zum Beispiel nur einen Fall betrachten.

Die SQL-Skriptdatei nvlfunc--1.0.sql sieht folgendermaßen aus...

Nvlfunc--1.0.sql-Datei:

--complain if script is sourced in psql, rather than via CREATE EXTENSION
\echo Use "CREATE EXTENSION nvlfunc" to load this file. \quit

CREATE OR REPLACE FUNCTION public.NVL(SMALLINT,SMALLINT)
RETURNS SMALLINT AS $$
SELECT COALESCE($1,$2);
$$ LANGUAGE SQL IMMUTABLE;

Die Steuerdatei nvlfunc sieht so aus...

Nvlfunc.control-Datei:

# nvlfunc extension
comment = 'Oracle compatible nvl function'
default_version = '1.0'
module_pathname = '$libdir/nvlfunc'
relocatable = false

Während Sie kaum ein Makefile benötigen, um diese Dateien in das richtige Verzeichnis zu installieren, könnten Sie ein Makefile verwenden, das Folgendes enthält:

Makefile:

EXTENSION = nvlfunc
DATA = nvlfunc--1.0.sql

PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)

Wenn Sie die Funktion in der Sprache „C“ implementiert haben, müssen Sie die Datei im Makefile hinzufügen.

Installation

Der Befehl make install installiert die Steuerdatei und die SQL-Skriptdatei im richtigen Verzeichnis, wie von pg_config.

gemeldet

Verwenden Sie nach der Installation der Dateien den Befehl CREATE EXTENSION, um die Objekte in eine beliebige Datenbank in PostgreSQL zu laden.

Bitte überprüfen Sie die folgenden Schritte, um die nvlfunc-Erweiterung zu installieren, und Sie können diese Datei auch zu Ihrem Erweiterungsverzeichnis hinzufügen:

INSTALL.nvlfunc-Datei:

This module is a PostgreSQL extension which provides the Oracle compatible nvl function feature.
Use below command in source directory of nvlfunc to install the module.
make install
Then use the below command to create extension nvlfunc in database.
CREATE EXTENSION nvlfunc;
Use the below command to remove the nvlfunc extension from database.
DROP EXTENSION nvlfunc;
Use below command in source directory of nvlfunc to uninstall the module.
make uninstall
Note:
This extension module requires PostgreSQL 9.1 or later because CREATE EXTENSION
feature is available in PostgreSQL 9.1 and later version.

PostgreSQL-Erweiterungen müssen in Ihrer Datenbank installiert werden, bevor Sie ihre Funktionalität nutzen können. Um eine bestimmte Erweiterung zu installieren, führen Sie den Befehl CREATE EXTENSION von psql aus, um die gepackten Objekte in die Datenbank zu laden.

Laden Sie noch heute das Whitepaper PostgreSQL-Verwaltung und -Automatisierung mit ClusterControl herunterErfahren Sie, was Sie wissen müssen, um PostgreSQL bereitzustellen, zu überwachen, zu verwalten und zu skalierenLaden Sie das Whitepaper herunter

Testen

Nachdem Sie die Erweiterung erstellt haben, wird empfohlen, einen Testfall für diese Erweiterung zu erstellen, damit Sie bei der Installation dieses Moduls in einer anderen PostgreSQL-Version überprüfen können, ob alle Testfälle wie erwartet funktionieren oder nicht.

Dies ist ein optionaler Schritt, aber Sie können ihn erstellen. Die Testfälle sehen folgendermaßen aus:

sql/nvlfunc.sql-Datei:

SELECT NVL(NULL::SMALLINT, 11::SMALLINT);

Dann können Sie die erwartete Ausgabe in einer anderen Datei hinzufügen. Die erwartete Ausgabedatei sieht folgendermaßen aus:

erwartete/nvlfunc.out-Datei:

SELECT NVL(NULL::SMALLINT, 11::SMALLINT);
 nvl 
-----
  11
(1 row)

Dies ist nur ein Beispiel, deshalb wird nur ein Testfall hinzugefügt. Aber wenn Sie eine neue Erweiterung erstellen, können Sie weitere Testfälle hinzufügen.

Verzeichnisstruktur der Nvlfunc-Erweiterung:

# mkdir nvlfunc
# cd nvlfunc
# ls
Makefile         nvlfunc.control    nvlfunc--1.0.sql    sql     expected    INSTALL.nvlfunc    README

Vorteile

  1. Einfache Erweiterung der PostgreSQL-Funktionalität
  2. Sehr einfach, die Erweiterung zu erstellen und zu installieren
  3. Leicht auf Regressionen auf verschiedenen Versionen von PostgreSQL zu testen

Nachteile

  1. Es gibt keine besonderen Nachteile, aber testen Sie die Funktion, die Sie der Erweiterung hinzufügen, bevor Sie sie verwenden.

Schlussfolgerung

Die PostgreSQL-Erweiterbarkeit ist eine sehr leistungsstarke Funktion. Sie können Ihre eigene Erweiterung für bestimmte Anwendungsfälle erstellen und in Ihrer Produktionsdatenbank verwenden. Es gibt viele von der PostgreSQL-Community unterstützte Erweiterungen wie hstore, postgres_fdw, dblink usw. und Erweiterungen von Drittanbietern wie Orafce, die alle für bestimmte Anwendungsfälle verwendet werden.