PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Création de nouveaux modules à l'aide de PostgreSQL Create Extension

Présentation

Comme vous le savez peut-être, PostgreSQL est conçu pour l'extensibilité et la personnalisation, cela signifie que nous pouvons étendre les fonctionnalités de votre base de données à l'aide d'extensions. La fonctionnalité d'extension PostgreSQL permet de regrouper plusieurs objets SQL dans un seul package qui peut être chargé ou supprimé de votre base de données. Une fois chargées dans votre base de données, les extensions peuvent fonctionner comme des fonctionnalités intégrées.

La base de données PostgreSQL possède de nombreuses fonctionnalités et offre un large éventail de types de données, de fonctions, d'opérateurs, etc. Mais parfois, cela ne suffit pas pour certains cas d'utilisation. Nous pouvons facilement étendre les fonctionnalités de PostgreSQL via des extensions. Il s'agit d'une fonctionnalité très utile pour les développeurs et les administrateurs de bases de données.

Dans ce blog, nous pouvons couvrir deux choses ci-dessous.

  1. Comment utiliser l'extension prise en charge par la communauté PostgreSQL
  2. Comment créer et utiliser une extension dans PostgreSQL

Comment utiliser les extensions prises en charge par la communauté PostgreSQL

Il existe un certain nombre de modules/extensions contrib dans PostgreSQL. Ces modules sont maintenus par la communauté PostgreSQL. Nous pouvons utiliser ces modules et ses fonctionnalités dans PostgreSQL en créant une extension.

Voyons comment utiliser la fonctionnalité de l'extension hstore dans PostgreSQL.

Extension Hstore

Le module hstore implémente le type de données hstore qui stocke les paires clé-valeur dans une seule valeur. Nous pouvons utiliser le type de données hstore dans de nombreux cas, tels que des données semi-structurées ou des lignes avec de nombreux attributs rarement interrogés. Notez que les clés et les valeurs ne sont que des chaînes de texte uniquement. Pour utiliser cette fonctionnalité, nous devons créer une extension pour celle-ci dans PostgreSQL.

Voyons comment utiliser le type de données hstore.

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

Avant de créer le type de données hstore, vous devez activer l'extension hstore qui charge le module contrib sur votre PostgreSQL.

CREATE EXTENSION hstore;

Il existe différentes fonctions hstore pour récupérer les données de la base de données. Vous pouvez vérifier les fonctions et les exemples ici.

Veuillez vérifier les modules supplémentaires fournis dans PostgreSQL.

Comment créer une extension

L'extensibilité est l'une des fonctionnalités les plus puissantes de PostgreSQL. Vous pouvez ajouter de nouvelles fonctionnalités pour un cas d'utilisation particulier en utilisant le module contrib et l'installer en utilisant CREATE EXTENSION.

Dans cette section, nous allons apprendre à créer un module contrib simple et à utiliser ses fonctionnalités dans PostgreSQL.

Fichiers d'extension

Pour pouvoir exécuter la commande CREATE EXTENSION dans votre base de données, votre extension doit avoir besoin d'au moins deux fichiers :

  1. Fichier de contrôle
    Le format du fichier doit être extension_name.control, qui indique les bases de l'extension à PostgreSQL, et doit être placé dans le répertoire SHAREDIR/extension de l'installation.
  2. Fichier de script SQL
    Le fichier au format extension--version.sql contient les fonctions que vous souhaitez ajouter.

Le format de fichier du fichier de contrôle dans l'extension est le même que celui du fichier postgresql.conf, à savoir une liste d'affectations de nom_paramètre =valeur, une par ligne.

Exemple

Veuillez vérifier l'exemple complet ci-dessous d'une extension SQL uniquement, créez une fonction NVL compatible Oracle dans PostgreSQL. Il existe de nombreux cas mais ici on ne peut considérer qu'un seul cas par exemple.

Le fichier de script SQL nvlfunc--1.0.sql ressemble à ceci...

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

Le fichier de contrôle nvlfunc ressemble à ceci...

Fichier Nvlfunc.control :

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

Bien que vous n'ayez guère besoin d'un makefile pour installer ces fichiers dans le bon répertoire, vous pouvez utiliser un makefile contenant ceci :

Makefile :

EXTENSION = nvlfunc
DATA = nvlfunc--1.0.sql

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

Si vous avez implémenté la fonction en utilisant le langage "C", vous devez ajouter le fichier dans le makefile.

Installation

La commande make install installera le fichier de contrôle et le fichier de script sql dans le bon répertoire, comme indiqué par pg_config.

Une fois les fichiers installés, utilisez la commande CREATE EXTENSION pour charger les objets dans une base de données particulière dans PostgreSQL.

Veuillez vérifier les étapes suivantes pour installer l'extension nvlfunc et vous pouvez également ajouter ce fichier dans votre répertoire d'extension :

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

Les extensions PostgreSQL doivent être installées dans votre base de données avant de pouvoir utiliser leurs fonctionnalités. Pour installer une extension particulière, exécutez la commande CREATE EXTENSION à partir de psql pour charger les objets empaquetés dans la base de données.

Téléchargez le livre blanc aujourd'hui PostgreSQL Management &Automation with ClusterControlDécouvrez ce que vous devez savoir pour déployer, surveiller, gérer et faire évoluer PostgreSQLTélécharger le livre blanc

Test

Une fois que vous avez créé l'extension, il est recommandé de créer un scénario de test pour cette extension afin que, lorsque vous installez ce module dans une version différente de PostgreSQL, vous puissiez ensuite vérifier si tous les scénarios de test fonctionnent comme prévu ou non.

Il s'agit d'une étape facultative, mais vous pouvez la créer. Les cas de test ressemblent à ceci :

fichier sql/nvlfunc.sql :

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

Ensuite, vous pouvez ajouter la sortie attendue dans un autre fichier. Le fichier de sortie attendu ressemble à ceci :

fichier attendu/nvlfunc.out :

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

Ceci n'est qu'un exemple, c'est pourquoi un seul cas de test est ajouté. Mais lorsque vous créez une nouvelle extension, vous pouvez ajouter d'autres cas de test.

Structure du répertoire de l'extension Nvlfunc :

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

Avantages

  1. Étendre facilement les fonctionnalités de PostgreSQL
  2. Très facile à créer et à installer l'extension
  3. Facile à tester les régressions sur différentes versions de PostgreSQL

Inconvénients

  1. Il n'y a pas d'inconvénient particulier, mais testez la fonctionnalité que vous ajoutez dans l'extension avant de l'utiliser.

Conclusion

L'extensibilité PostgreSQL est une fonctionnalité très puissante, vous pouvez créer votre propre extension pour des cas d'utilisation particuliers et l'utiliser dans votre base de données de production. Il existe de nombreuses extensions prises en charge par la communauté PostgreSQL comme hstore, postgres_fdw, dblink etc. et des extensions tierces comme Orafce, toutes utilisées pour des cas d'utilisation particuliers.