sql >> Base de Datos >  >> RDS >> PostgreSQL

Creación de nuevos módulos con PostgreSQL Create Extension

Introducción

Como sabrá, PostgreSQL está diseñado para la extensibilidad y la personalización, esto significa que podemos extender la funcionalidad de su base de datos usando extensiones. La funcionalidad de extensión de PostgreSQL permite agrupar varios objetos SQL en un solo paquete que se puede cargar o eliminar de su base de datos. Una vez que lo carga en su base de datos, las extensiones pueden funcionar como funciones integradas.

La base de datos PostgreSQL tiene muchas características y ofrece una amplia gama de tipos de datos, funciones, operadores, etc. Pero a veces no es suficiente para algunos casos de uso. Podemos extender fácilmente la funcionalidad de PostgreSQL a través de extensiones. Esta es una función muy útil para desarrolladores y administradores de bases de datos.

En este blog podemos cubrir dos cosas a continuación.

  1. Cómo usar la extensión compatible con la comunidad de PostgreSQL
  2. Cómo crear y usar extensiones en PostgreSQL

Cómo utilizar las extensiones admitidas por la comunidad de PostgreSQL

Hay una serie de módulos/extensiones de contribución en PostgreSQL. Estos módulos son mantenidos por la comunidad de PostgreSQL. Podemos usar estos módulos y su funcionalidad en PostgreSQL creando una extensión.

Veamos cómo usar la funcionalidad de la extensión hstore en PostgreSQL.

Extensión de la tienda H

El módulo hstore implementa el tipo de datos hstore que almacena pares clave-valor en un solo valor. Podemos usar el tipo de datos hstore en muchos casos, como datos semiestructurados o filas con muchos atributos que rara vez se consultan. Tenga en cuenta que las claves y los valores son solo cadenas de texto. Para usar esta funcionalidad, necesitamos crear una extensión para ella en PostgreSQL.

Veamos cómo usar el tipo de datos hstore.

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

Antes de crear el tipo de datos hstore, debe habilitar la extensión hstore que carga el módulo contrib en su PostgreSQL.

CREATE EXTENSION hstore;

Hay varias funciones hstore para recuperar datos de la base de datos. Puedes consultar las funciones y ejemplos aquí.

Consulte los módulos adicionales suministrados en PostgreSQL.

Cómo crear una extensión

La extensibilidad es una de las características más poderosas de PostgreSQL. Puede agregar una nueva funcionalidad para un caso de uso particular usando el módulo contrib e instalarlo usando CREAR EXTENSIÓN.

En esta sección, vamos a aprender cómo crear un módulo de contribución simple y cómo usar su funcionalidad en PostgreSQL.

Archivos de extensión

Para poder ejecutar el comando CREATE EXTENSION en su base de datos, su extensión debe necesitar al menos dos archivos:

  1. Archivo de control
    El formato del archivo debe ser extension_name.control, que brinda información básica sobre la extensión a PostgreSQL, y debe colocarse en el directorio SHAREDIR/extension de la instalación.
  2. Archivo de secuencia de comandos SQL
    El archivo con la extensión de formato--version.sql contiene las funciones que le gustaría agregar.

El formato de archivo del archivo de control en la extensión es el mismo que el archivo postgresql.conf, es decir, una lista de asignaciones de valor_nombre_parámetro, una por línea.

Ejemplo

Consulte el siguiente ejemplo completo de una extensión solo de SQL, cree una función NVL compatible con Oracle en PostgreSQL. Hay muchos casos pero aquí podemos considerar solo un caso por ejemplo.

El archivo de script SQL nvlfunc--1.0.sql tiene este aspecto...

Nvlfunc--1.0.sql archivo:

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

El archivo de control nvlfunc se ve así...

Archivo Nvlfunc.control:

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

Si bien apenas necesita un archivo MAKE para instalar estos archivos en el directorio correcto, puede usar un archivo MAKE que contenga esto:

Archivo Make:

EXTENSION = nvlfunc
DATA = nvlfunc--1.0.sql

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

Si ha implementado la función utilizando el lenguaje 'C', entonces necesita agregar el archivo en el archivo MAKE.

Instalación

El comando make install instalará el archivo de control y el archivo de script sql en el directorio correcto según lo informado por pg_config.

Una vez que los archivos estén instalados, use el comando CREAR EXTENSIÓN para cargar los objetos en cualquier base de datos particular en PostgreSQL.

Verifique los siguientes pasos para instalar la extensión nvlfunc y también puede agregar este archivo en su directorio de extensiones:

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

Las extensiones de PostgreSQL deben estar instaladas en su base de datos antes de que pueda usar su funcionalidad. Para instalar una extensión en particular, ejecute el comando CREAR EXTENSIÓN desde psql para cargar los objetos empaquetados en la base de datos.

Descargue el documento técnico hoy Administración y automatización de PostgreSQL con ClusterControlObtenga información sobre lo que necesita saber para implementar, monitorear, administrar y escalar PostgreSQLDescargar el documento técnico

Pruebas

Una vez que cree la extensión, se recomienda crear un caso de prueba para esa extensión de modo que cuando instale este módulo en una versión diferente de PostgreSQL, pueda verificar si todos los casos de prueba funcionan como se esperaba o no.

Este es un paso opcional, pero puede crearlo. Los casos de prueba se ven así:

archivo sql/nvlfunc.sql:

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

Luego puede agregar el resultado esperado en otro archivo. El archivo de salida esperado se ve así:

archivo esperado/nvlfunc.out:

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

Este es solo un ejemplo, por eso solo se agrega un caso de prueba. Pero cuando está creando una nueva extensión, puede agregar más casos de prueba.

Estructura del directorio de la extensión Nvlfunc:

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

Ventajas

  1. Fácil de ampliar la funcionalidad de PostgreSQL
  2. Muy fácil de crear e instalar la extensión
  3. Fácil de probar para regresiones en diferentes versiones de PostgreSQL

Contras

  1. No hay desventajas especiales, pero pruebe la función que está agregando en la extensión antes de usarla.

Conclusión

La extensibilidad de PostgreSQL es una característica muy poderosa, puede crear su propia extensión para casos de uso particulares y usarla en su base de datos de producción. Hay muchas extensiones compatibles con la comunidad de PostgreSQL como hstore, postgres_fdw, dblink, etc. y extensiones de terceros como Orafce, todas utilizadas para casos de uso particulares.