Introduktion
Som du måske ved, er PostgreSQL designet til udvidelsesmuligheder og tilpasning, det betyder, at vi kan udvide funktionaliteten af din database ved hjælp af udvidelser. PostgreSQL-udvidelsesfunktionalitet giver mulighed for at bundte flere SQL-objekter sammen i en enkelt pakke, der kan indlæses eller fjernes fra din database. Når du først har indlæst det i din database, kan udvidelser fungere som indbyggede funktioner.
PostgreSQL databasen har mange funktioner og tilbyder en bred vifte af datatyper, funktioner, operatører osv. Men nogle gange er det ikke nok til nogle use cases. Vi kan nemt udvide PostgreSQL's funktionalitet gennem udvidelser. Dette er en meget nyttig funktion for databaseudviklere og administratorer.
I denne blog kan vi dække to ting nedenfor.
- Sådan bruger du PostgreSQL-fællesskabsunderstøttet udvidelse
- Sådan opretter og bruger du udvidelse i PostgreSQL
Sådan bruges PostgreSQL-fællesskabsunderstøttede udvidelser
Der er en række bidragsmoduler/udvidelser i PostgreSQL. Disse moduler vedligeholdes af PostgreSQL-fællesskabet. Vi kan bruge disse moduler og dets funktionalitet i PostgreSQL ved at oprette en udvidelse.
Lad os se, hvordan du bruger funktionaliteten af hstore-udvidelsen i PostgreSQL.
Hstore-udvidelse
hstore-modulet implementerer hstore-datatypen, som gemmer nøgle-værdi-par i en enkelt værdi. Vi kan bruge hstore-datatypen i mange tilfælde, såsom semistrukturerede data eller rækker med mange attributter, der sjældent bliver forespurgt. Bemærk, at nøgler og værdier kun er tekststrenge. For at bruge denne funktionalitet skal vi oprette en udvidelse til den i PostgreSQL.
Lad os se, hvordan du bruger hstore-datatypen.
CREATE TABLE books (
book_code serial primary key,
book_title VARCHAR (20),
attr hstore
);
Før du opretter hstore-datatypen, skal du aktivere hstore-udvidelsen, som indlæser bidragsmodulet til din PostgreSQL.
CREATE EXTENSION hstore;
Der er forskellige hstore-funktioner til at hente data fra databasen. Du kan tjekke funktionerne og eksemplerne her.
Tjek venligst de ekstra medfølgende moduler i PostgreSQL.
Sådan opretter du en udvidelse
Udvidelsesmuligheder er en af de mest kraftfulde funktioner i PostgreSQL. Du kan tilføje ny funktionalitet til en bestemt use case ved at bruge bidragsmodul og installere det ved hjælp af CREATE EXTENSION.
I dette afsnit skal vi lære, hvordan man opretter et simpelt bidragsmodul, og hvordan man bruger dets funktionalitet i PostgreSQL.
Udvidelsesfiler
For at kunne køre CREATE EXTENSION-kommandoen i din database, skal din udvidelse have brug for mindst to filer:
- Kontrolfil
Filformatet skal være extension_name.control, som fortæller det grundlæggende om udvidelse til PostgreSQL, og skal placeres i installationens SHAREDIR/extension-mappe. - SQL-scriptfil
Filen i formatudvidelsen--version.sql indeholder de funktioner, du gerne vil tilføje.
Filformatet for kontrolfilen i udvidelsen er det samme som postgresql.conf filen, nemlig en liste over parameter_name =værditildelinger, en pr. linje.
Eksempel
Tjek venligst nedenstående komplette eksempel på en SQL-only-udvidelse, opret Oracle-kompatibel NVL-funktion i PostgreSQL. Der er mange tilfælde, men her kan vi f.eks. kun overveje én sag.
SQL-scriptfilen nvlfunc--1.0.sql ser sådan ud...
Nvlfunc--1.0.sql-fil:
--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;
Kontrolfilen nvlfunc ser sådan ud...
Nvlfunc.conntrol fil:
# nvlfunc extension
comment = 'Oracle compatible nvl function'
default_version = '1.0'
module_pathname = '$libdir/nvlfunc'
relocatable = false
Selvom du næppe har brug for en makefil for at installere disse filer i den korrekte mappe, kan du bruge en Makefile, der indeholder dette:
Makefile:
EXTENSION = nvlfunc
DATA = nvlfunc--1.0.sql
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)
Hvis du har implementeret funktionen ved at bruge 'C'-sproget, skal du tilføje filen i makefilen.
Installation
Kommandoen make install vil installere kontrolfilen og sql-scriptfilen i den korrekte mappe som rapporteret af pg_config.
Når filerne er installeret, skal du bruge kommandoen CREATE EXTENSION til at indlæse objekterne i en bestemt database i PostgreSQL.
Kontroller venligst følgende trin for at installere nvlfunc-udvidelsen, og du kan også tilføje denne fil i din udvidelsesmappe:
INSTALL.nvlfunc fil:
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-udvidelser skal installeres i din database, før du kan bruge deres funktionalitet. For at installere en bestemt udvidelse skal du køre kommandoen CREATE EXTENSION fra psql for at indlæse de pakkede objekter i databasen.
Download Whitepaper Today PostgreSQL Management &Automation med ClusterControlFå flere oplysninger om, hvad du skal vide for at implementere, overvåge, administrere og skalere PostgreSQLDownload WhitepaperTest
Når du har oprettet udvidelsen, anbefales det at oprette en testcase for den udvidelse, så når du installerer dette modul i en anden PostgreSQL-version, kan du derefter kontrollere, om alle testcases fungerer som forventet eller ej.
Dette er et valgfrit trin, men du kan oprette det. Testcaserne ser således ud:
sql/nvlfunc.sql-fil:
SELECT NVL(NULL::SMALLINT, 11::SMALLINT);
Så kan du tilføje forventet output i en anden fil. Den forventede outputfil ser sådan ud:
expected/nvlfunc.out fil:
SELECT NVL(NULL::SMALLINT, 11::SMALLINT);
nvl
-----
11
(1 row)
Dette er kun et eksempel, derfor er der kun tilføjet en testcase. Men når du opretter en ny udvidelse, kan du tilføje flere testcases.
Nvlfunc-udvidelsesmappestruktur:
# mkdir nvlfunc
# cd nvlfunc
# ls
Makefile nvlfunc.control nvlfunc--1.0.sql sql expected INSTALL.nvlfunc README
Fordele
- Nem at udvide PostgreSQL-funktionaliteten
- Meget let at oprette og installere udvidelsen
- Nem at teste for regressioner på forskellige versioner af PostgreSQL
Idele
- Der er ingen særlige ulemper, men test den funktion, du tilføjer i udvidelsen, før du bruger den.
Konklusion
PostgreSQL-udvidelsesmuligheder er en meget kraftfuld funktion, du kan oprette din egen udvidelse til bestemte use cases og bruge den i din produktionsdatabase. Der er mange PostgreSQL-fællesskabsunderstøttede udvidelser som hstore, postgres_fdw, dblink osv. og tredjepartsudvidelser som Orafce, alle brugt til særlige brugstilfælde.