Extensiones y módulos
Las extensiones y módulos de PostgreSQL son herramientas eficaces que permiten a los usuarios ampliar la funcionalidad del sistema de base de datos. Pueden oscilar entre objetos SQL simples y bibliotecas binarias complejas, lo que proporciona características y funcionalidades adicionales que no están disponibles en la distribución principal de PostgreSQL.
Extensiones
Para definir una extensión, es al menos necesaria un archivo de script, que contiene los comandos SQL para crear los objetos distribuidos por la extensión y un archivo de control, que especifica algunas propiedades básicas de la propia extensión.
Cuando se crean, instalan o cargan extensiones en una base de datos, implementan un conjunto de objetos de agrupación que pretenden ampliar la funcionalidad del motor. Esos objetos pueden ser funciones, operadores, roles, tipos de datos, métodos de acceso y otros tipos de objetos de base de datos.
Cuando se quitan, desinstalan o descargan extensiones de una base de datos, se quitan todos los objetos creados por la extensión. Una excepción a ese caso es cuando hay otros objetos en la base de datos con dependencias en cualquiera de los objetos definidos por la extensión.
La implementación de la funcionalidad proporcionada por esos objetos distribuidos por la extensión se puede escribir en SQL o PL/pgSQL. Pero también se puede implementar en un archivo de biblioteca compartida (binario) independiente, que es el resultado de compilar el código fuente (normalmente escrito en C o Rust) que implementa la funcionalidad.
En PostgreSQL, las extensiones se administran mediante los comandos CREATE EXTENSION
, ALTER EXTENSION
, DROP EXTENSION
, y COMMENT ON EXTENSION
.
-
CREATE EXTENSION
crea, instala o carga una extensión en la base de datos en la que se ejecuta el comando. -
ALTER EXTENSION
actualiza la extensión a una versión más reciente. -
DROP EXTENSION
quita, desinstala o descarga una extensión de la base de datos en la que se ejecuta el comando. -
COMMENT ON EXTENSION
almacena un comentario sobre la extensión como un objeto de base de datos.
Cuando se inicia el servidor, define un área de memoria a la que pueden acceder todos los procesos back-end para ejecutar de forma cooperativa cualquier carga de trabajo. En la jerga de PostgreSQL, esa área de memoria se conoce como memoria compartida.
Algunas extensiones que implementan la funcionalidad mediante bibliotecas compartidas requieren acceso a esa memoria compartida desde el código integrado en esas bibliotecas. Esas extensiones tienen un requisito más, que es que el proceso principal del motor debe cargar sus archivos de biblioteca compartidos, en cuanto se inicie el servidor. Para esas bibliotecas, debe seguir las instrucciones de las bibliotecas de carga.
Módulos
Aunque no se consideran extensiones como tales, porque no tienen un archivo de control y un archivo de script para implementar objetos SQL agrupados en una base de datos, otra forma de extensibilidad en PostgreSQL consiste en implementar la funcionalidad en archivos de biblioteca compartida independientes.
Estos archivos también se pueden cargar en memoria cuando se inicia el servidor y pueden implementar código que normalmente desvía la ruta de acceso de ejecución natural de PostgreSQL y modifica el funcionamiento predeterminado del motor. Estas alteraciones de comportamiento normalmente apuntan a amplificar algunas funcionalidades limitadas del motor.
Azure Database for PostgreSQL admite los siguientes módulos:
- auto_explain
- pg_failover_slots
- pg_partman_bgw
- wal2json