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

Creazione di nuovi moduli utilizzando PostgreSQL Create Extension

Introduzione

Come forse saprai, PostgreSQL è progettato per l'estendibilità e la personalizzazione, ciò significa che possiamo estendere le funzionalità del tuo database utilizzando estensioni. La funzionalità di estensione PostgreSQL consente di raggruppare più oggetti SQL in un unico pacchetto che può essere caricato o rimosso dal database. Una volta caricato nel database, le estensioni possono funzionare come funzionalità integrate.

Il database PostgreSQL ha molte funzionalità e offre un'ampia gamma di tipi di dati, funzioni, operatori, ecc. Ma a volte non è sufficiente per alcuni casi d'uso. Possiamo facilmente estendere le funzionalità di PostgreSQL tramite estensioni. Questa è una funzione molto utile per gli sviluppatori e gli amministratori di database.

In questo blog possiamo trattare due cose di seguito.

  1. Come utilizzare l'estensione supportata dalla community di PostgreSQL
  2. Come creare e utilizzare l'estensione in PostgreSQL

Come utilizzare le estensioni supportate dalla community di PostgreSQL

Ci sono un certo numero di moduli/estensioni contrib in PostgreSQL. Questi moduli sono gestiti dalla comunità di PostgreSQL. Possiamo usare questi moduli e le sue funzionalità in PostgreSQL creando un'estensione.

Vediamo come utilizzare la funzionalità dell'estensione hstore in PostgreSQL.

Estensione Hstore

Il modulo hstore implementa il tipo di dati hstore che memorizza le coppie chiave-valore in un unico valore. Possiamo utilizzare il tipo di dati hstore in molti casi, come dati semi-strutturati o righe con molti attributi che vengono interrogati raramente. Si noti che chiavi e valori sono solo stringhe di testo. Per utilizzare questa funzionalità, dobbiamo creare un'estensione per essa in PostgreSQL.

Vediamo come utilizzare il tipo di dati hstore.

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

Prima di creare il tipo di dati hstore, devi abilitare l'estensione hstore che carica il modulo contrib su PostgreSQL.

CREATE EXTENSION hstore;

Esistono varie funzioni hstore per recuperare i dati dal database. Puoi controllare le funzioni e gli esempi qui.

Si prega di controllare i moduli aggiuntivi forniti in PostgreSQL.

Come creare un'estensione

L'estendibilità è una delle funzionalità più potenti di PostgreSQL. Puoi aggiungere nuove funzionalità per un caso d'uso particolare utilizzando il modulo contrib e installarlo utilizzando CREATE EXTENSION.

In questa sezione impareremo come creare un semplice modulo contrib e come usarne le funzionalità in PostgreSQL.

File di estensione

Per poter eseguire il comando CREATE EXTENSION nel tuo database, la tua estensione deve avere bisogno di almeno due file:

  1. File di controllo
    Il formato del file deve essere nome_estensione.control, che spiega le nozioni di base sull'estensione a PostgreSQL, e deve essere inserito nella directory SHAREDIR/estensione dell'installazione.
  2. File di script SQL
    Il file nel formato estensione--version.sql contiene le funzioni che desideri aggiungere.

Il formato del file di controllo nell'estensione è lo stesso del file postgresql.conf, ovvero un elenco di nome_parametro =assegnazioni di valori, uno per riga.

Esempio

Si prega di controllare l'esempio completo di seguito di un'estensione solo SQL, creare una funzione NVL compatibile con Oracle in PostgreSQL. Ci sono molti casi, ma qui possiamo considerare solo un caso per esempio.

Il file di script SQL nvlfunc--1.0.sql si presenta così...

Nvlfunc--file 1.0.sql:

--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;

Il file di controllo nvlfunc ha questo aspetto...

File Nvlfunc.control:

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

Anche se non hai quasi bisogno di un makefile per installare questi file nella directory corretta, potresti usare un Makefile contenente questo:

File di creazione:

EXTENSION = nvlfunc
DATA = nvlfunc--1.0.sql

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

Se hai implementato la funzione usando il linguaggio "C", devi aggiungere il file nel makefile.

Installazione

Il comando make install installerà il file di controllo e il file di script sql nella directory corretta come riportato da pg_config.

Una volta installati i file, usa il comando CREATE EXTENSION per caricare gli oggetti in un particolare database in PostgreSQL.

Controlla i seguenti passaggi per installare l'estensione nvlfunc e puoi anche aggiungere questo file nella directory dell'estensione:

File INSTALL.nvlfunc:

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.

Le estensioni PostgreSQL devono essere installate nel database prima di poterne utilizzare le funzionalità. Per installare una particolare estensione, esegui il comando CREATE EXTENSION da psql per caricare gli oggetti inclusi nel pacchetto nel database.

Scarica il whitepaper oggi Gestione e automazione di PostgreSQL con ClusterControlScopri cosa devi sapere per distribuire, monitorare, gestire e ridimensionare PostgreSQLScarica il whitepaper

Test

Una volta creata l'estensione, si consiglia di creare un test case per tale estensione in modo che quando si installa questo modulo in una versione PostgreSQL diversa, sia possibile verificare se tutti i test case funzionano come previsto o meno.

Questo è un passaggio facoltativo ma puoi crearlo. I casi di test si presentano così:

file sql/nvlfunc.sql:

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

Quindi puoi aggiungere l'output previsto in un altro file. Il file di output previsto è simile al seguente:

File previsto/nvlfunc.out:

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

Questo è solo un esempio, ecco perché viene aggiunto un solo test case. Ma quando crei una nuova estensione, puoi aggiungere altri casi di test.

Struttura della directory dell'estensione Nvlfunc:

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

Pro

  1. Facile estendere la funzionalità di PostgreSQL
  2. Molto facile da creare e installare l'estensione
  3. Facile da testare per le regressioni su diverse versioni di PostgreSQL

Contro

  1. Non ci sono svantaggi speciali, ma prova la funzione che stai aggiungendo nell'estensione prima di usarla.

Conclusione

L'estendibilità di PostgreSQL è una funzionalità molto potente, puoi creare la tua estensione per casi d'uso particolari e usarla nel tuo database di produzione. Esistono molte estensioni supportate dalla community di PostgreSQL come hstore, postgres_fdw, dblink ecc. ed estensioni di terze parti come Orafce, tutte utilizzate per casi d'uso particolari.