sql >> Database teknologi >  >> RDS >> PostgreSQL

Oprettelse af nye moduler ved hjælp af PostgreSQL Create Extension

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.

  1. Sådan bruger du PostgreSQL-fællesskabsunderstøttet udvidelse
  2. 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:

  1. 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.
  2. 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 Whitepaper

Test

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

  1. Nem at udvide PostgreSQL-funktionaliteten
  2. Meget let at oprette og installere udvidelsen
  3. Nem at teste for regressioner på forskellige versioner af PostgreSQL

Idele

  1. 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.


  1. MariaDB ROUND() vs TRUNCATE()

  2. Kan ikke slette skemaet, fordi det ikke eksisterer, eller du ikke har tilladelse. - SQL Server / TSQL vejledning del 29

  3. Vil du inkludere overskrifter, når du bruger SELECT INTO OUTFILE?

  4. Vigtige sundhedstjek for dine MySQL-kilde-replikservere