Compartir a través de


Extensiones de PostgreSQL en Azure Database for PostgreSQL: Servidor flexible

SE APLICA A: Servidor flexible de Azure Database for PostgreSQL

El servidor flexible de Azure Database for PostgreSQL proporciona la capacidad de ampliar la funcionalidad de la base de datos mediante extensiones. Las extensiones agrupan varios objetos SQL relacionados en un solo paquete que se puede cargar o quitar de la base de datos con un comando. Después de cargarse en la base de datos, las extensiones funcionan como características integradas.

¿Cómo se utilizan las extensiones de PostgreSQL?

Antes de instalar extensiones en la opción de servidor flexible de Azure Database for PostgreSQL, debe agregar a la lista de permitidos estas extensiones para su uso.

Mediante Azure Portal:

  1. Seleccione la instancia de servidor flexible de Azure Database for PostgreSQL.
    1. En el menú de recursos, en sección Configuración, seleccione Parámetros del servidor.
    2. Busque el parámetro azure.extensions.
    3. Seleccione las extensiones que desea permitir. Captura de pantalla que muestra el servidor flexible de Azure Database for PostgreSQL: extensiones de lista de permitidos para la instalación.

Mediante la CLI de Azure:

Puede agregar extensiones a la lista de permitidos mediante el comando del conjunto de parámetros de la CLI.

az postgres flexible-server parameter set --resource-group <resource_group>  --server-name <server> --subscription <subscription_id> --name azure.extensions --value <extension_name>,<extension_name>

Uso de Plantilla de ARM : en el ejemplo siguiente se dblinkextensiones permitidas, dict_xsyn, pg_buffercache en un servidor cuyo nombre es postgres-test-server:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "flexibleServers_name": {
            "defaultValue": "postgres-test-server",
            "type": "String"
        },
        "azure_extensions_set_value": {
            "defaultValue": " dblink,dict_xsyn,pg_buffercache",
            "type": "String"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.DBforPostgreSQL/flexibleServers/configurations",
            "apiVersion": "2021-06-01",
            "name": "[concat(parameters('flexibleServers_name'), '/azure.extensions')]",
            "properties": {
                "value": "[parameters('azure_extensions_set_value')]",
                "source": "user-override"
            }
        }
    ]
}

shared_preload_libraries es un parámetro de configuración de servidor que determina qué bibliotecas deben cargarse cuando se inicia el servidor flexible de Azure Database for PostgreSQL. Las bibliotecas que usan memoria compartida deben cargarse a través de este parámetro. Si la extensión debe agregarse a las bibliotecas de precarga compartida, siga estos pasos:

Mediante Azure Portal:

  1. Seleccione la instancia de servidor flexible de Azure Database for PostgreSQL.
    1. En el menú de recursos, en sección Configuración, seleccione Parámetros del servidor.
    2. Busque el parámetro shared_preload_libraries.
    3. Seleccione las bibliotecas que desea agregar.
 :::image type="content" source="./media/concepts-extensions/shared-libraries.png" alt-text="Screenshot showing Azure Database for PostgreSQL -setting shared preload libraries parameter setting for extensions installation." lightbox="./media/concepts-extensions/shared-libraries.png":::
```Using [Azure CLI](/cli/azure/):

   You can set `shared_preload_libraries` via CLI [parameter set](/cli/azure/postgres/flexible-server/parameter?view=azure-cli-latest&preserve-view=true) command.

   ```azurecli
az postgres flexible-server parameter set --resource-group <resource_group>  --server-name <server> --subscription <subscription_id> --name shared_preload_libraries --value <extension_name>,<extension_name>

Crear extensión

Una vez que las extensiones estén permitidas y cargadas, deben instalarse en cada base de datos en la que planee usarlos.

  1. Un usuario debe ser miembro de azure_pg_admin rol para crear una extensión. Un miembro del rol de azure_pg_admin puede conceder privilegios a otros usuarios para crear extensiones.
  2. Para instalar una extensión determinada, debe ejecutar el comando CREATE EXTENSION. Este comando carga los objetos empaquetados en la base de datos.

Nota:

Las extensiones de terceros que se ofrecen en el servidor flexible de Azure Database for PostgreSQL tienen una licencia de código abierto. Actualmente, no ofrecemos extensiones de terceros ni versiones de extensión con modelos de licencia premium o propietario.

La instancia de servidor flexible de Azure Database for PostgreSQL admite un subconjunto de extensiones de PostgreSQL clave, como se muestra en la tabla siguiente. Esta información también está disponible al ejecutar SHOW azure.extensions;. Las extensiones no enumeradas en este documento no se admiten en el servidor flexible de Azure Database for PostgreSQL. No puede crear o cargar su propia extensión en el servidor flexible de Azure Database for PostgreSQL.

Versiones de extensión

Las extensiones siguientes están disponibles en el servidor flexible Azure Database for PostgreSQL:

Nota:

Las extensiones de la tabla siguiente con la marca ✔️ requieren que sus bibliotecas correspondientes estén habilitadas en el parámetro de servidor shared_preload_libraries.

Nombre de la extensión Descripción PostgreSQL 17 PostgreSQL 16 PostgreSQL 15 PostgreSQL 14 PostgreSQL 13 PostgreSQL 12 PostgreSQL 11
address_standardizer Se utilizan para analizar una dirección en los elementos que la componen. Por lo general se usa para admitir el paso de normalización de la dirección de codificación geográfica. 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
address_standardizer_data_us Aborda el ejemplo del conjunto de datos estandarizado de EE. UU. 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
antigüedad (versión preliminar) Proporciona funcionalidades de base de datos de grafos N/D 1.5.0 ✔️ 1.5.0 ✔️ 1.5.0 ✔️ 1.5.0 ✔️ N/D N/D
amcheck Funciones de comprobación de la integridad de la relación 1.4 1.3 1.3 1.3 1.2 1.2 1.1
anon (versión preliminar) Herramientas de anonimización de datos 1.3.2 ✔️ 1.3.2 ✔️ 1.3.2 ✔️ 1.3.2 ✔️ 1.3.2 ✔️ 1.3.2 ✔️ 1.3.2 ✔️
azure_ai Integración de Azure AI y ML Services para PostgreSQL N/D 1.1.0 1.1.0 1.1.0 1.1.0 1.1.0 N/D
azure_storage Integración de Azure para PostgreSQL N/D 1.5 ✔️ 1.5 ✔️ 1.5 ✔️ 1.5 ✔️ 1.5 ✔️ N/D
bloom Método de acceso de bloom: índice basado en archivos de firma 1,0 1,0 1,0 1,0 1,0 1,0 1.0
btree_gin Compatibilidad con la indexación de tipos de datos comunes en GIN 1.3 1.3 1.3 1.3 1.3 1.3 1.3
btree_gist Compatibilidad con la indexación de tipos de datos comunes en GiST 1.7 1.7 1.7 1.6 1.5 1.5 1.5
citext Tipo de datos para cadenas de caracteres que no distinguen mayúsculas de minúsculas 1.6 1.6 1.6 1.6 1.6 1.6 1.5
cube Tipo de datos para los cubos multidimensionales 1.5 1.5 1.5 1.5 1.4 1.4 1.4
dblink Se conecta a otras bases de datos de PostgreSQL desde una base de datos 1.2 1.2 1.2 1.2 1.2 1.2 1.2
dict_int Plantilla de diccionario de búsqueda de texto para números enteros 1,0 1,0 1,0 1,0 1,0 1,0 1.0
dict_xsyn Plantilla de diccionario de búsqueda de texto para el procesamiento de sinónimos extendido 1,0 1,0 1,0 1,0 1,0 1,0 1.0
earthdistance Calcula distancias de círculo máximo en la superficie de la Tierra 1.1 1.1 1.1 1.1 1.1 1.1 1.1
fuzzystrmatch Determina las similitudes y la distancia entre las cadenas 1.2 1.2 1.1 1.1 1.1 1.1 1.1
hstore Tipo de datos para almacenar conjuntos de pares (clave/valor) 1.8 1.8 1.8 1.8 1.7 1.6 1.5
hypopg Índices hipotéticos para PostgreSQL 1.4.0 1.4.0 1.4.0 1.4.0 1.4.0 1.4.0 1.4.0
intagg Agregador entero y enumerador (obsoleto) 1.1 1.1 1.1 1.1 1.1 1.1 1.1
intarray Funciones, operadores e índices compatibles con matrices 1D de números enteros 1.5 1.5 1.5 1.5 1.3 1.2 1.2
isn Tipos de datos para los estándares internacionales de numeración de productos 1.2 1.2 1.2 1.2 1.2 1.2 1.2
lo Mantenimiento de objetos grandes 1.1 1.1 1.1 1.1 1.1 1.1 1.1
login_hook Login_hook: enlace para ejecutar login_hook.login() en el momento del inicio de sesión 1.5 1.5 1.4 1.4 1.4 1.4 1.4
ltree Tipo de datos para las estructuras de árbol jerárquicas 1.3 1.2 1.2 1.2 1.2 1.1 1.1
oracle_fdw Contenedor de datos externos para bases de datos de Oracle 1.2 1.2 1.2 1.2 1.2 1.2 N/D
orafce Funciones y operadores que emulan un subconjunto de funciones y paquetes de RDBMS de Oracle 4,9 4.4. 3,24 3,18 3,18 3,18 3.7
pageinspect Inspección del contenido de páginas de bases de datos a un nivel bajo 1.12 1.12 1.11 1.9 1.8 1.7 1.7
pgaudit Proporciona funcionalidad de auditoría 16.0 ✔️ 16.0 ✔️ 1.7 ✔️ 1.6.2 ✔️ 1.5 ✔️ 1.4.3 ✔️ 1.3.2 ✔️
pg_buffercache Examina la caché del búfer compartido 1.5 1.4 1.3 1.3 1.3 1.3 1.3
pg_cron Programador de trabajos para PostgreSQL 1.6 ✔️ 1.6 ✔️ 1.6 ✔️ 1.6 ✔️ 1.6 ✔️ 1.6 ✔️ 1.4-1 ✔️
pgcrypto Funciones de cifrado 1.3 1.3 1.3 1.3 1.3 1.3 1.3
pg_freespacemap Examen de la asignación de espacio libre (FSM) 1.2 1.2 1.2 1.2 1.2 1.2 1.2
pg_hint_plan Permite ajustar los planes de ejecución de PostgreSQL mediante las llamadas sugerencias en los comentarios de SQL. 1.7.0 ✔️ 1.6.0 ✔️ 1.5 ✔️ 1.4 ✔️ 1.3.7 ✔️ 1.3.7 ✔️ 1.3.7 ✔️
pglogical Replicación lógica de PostgreSQL 2.4.5 ✔️ 2.4.4 ✔️ 2.4.2 ✔️ 2.4.1 ✔️ 2.4.1 ✔️ 2.4.1 ✔️ 2.4.1 ✔️
pg_partman Extensión para administrar tablas con particiones por hora o identificador 5.0.1 ✔️ 5.0.1 ✔️ 4.7.1 ✔️ 4.6.1 ✔️ 4.5.0 ✔️ 4.5.0 ✔️ 4.5.0 ✔️
pg_prewarm Prepara los datos de relación 1.2 ✔️ 1.2 ✔️ 1.2 ✔️ 1.2 ✔️ 1.2 ✔️ 1.2 ✔️ 1.2 ✔️
pg_repack Reorganización de tablas en bases de datos PostgreSQL con bloqueos mínimos 1.4.7 1.4.7 1.4.7 1.4.7 1.4.7 1.4.7 1.4.7
pgrouting Extensión PgRouting N/D N/D 3.5.0 3.3.0 3.3.0 3.3.0 3.3.0
pgrowlocks Muestra información de bloqueo de nivel de fila 1.2 1.2 1.2 1.2 1.2 1.2 1.2
pg_squeeze Herramienta para quitar el espacio sin usar de una relación. 1.7 ✔️ 1.6 ✔️ 1.6 ✔️ 1.5 ✔️ 1.5 ✔️ 1.5 ✔️ 1.5 ✔️
pg_stat_statements Realiza un seguimiento de las estadísticas de ejecución de todas las instrucciones SQL ejecutadas 1.11 ✔️ 1.10 ✔️ 1.10 ✔️ 1.9 ✔️ 1.8 ✔️ 1.7 ✔️ 1.6 ✔️
pgstattuple Muestra estadísticas de nivel de tupla 1.5 1.5 1.5 1.5 1.5 1.5 1.5
pg_trgm Medición de similitud de texto y búsqueda de índice basada en trigramas 1.6 1.6 1.6 1.6 1.5 1.4 1.4
pg_visibility Examen del mapa de visibilidad (VM) y la información de visibilidad de nivel de página 1.2 1.2 1.2 1.2 1.2 1.2 1.2
plpgsql Lenguaje de procedimientos de PL/pgSQL 1,0 1,0 1,0 1,0 1,0 1,0 1,0
plv8 Lenguaje de procedimientos de confianza de PL/JavaScript (v8) 3.1.7 3.1.7 3.1.7 3.0.0 3.0.0 3.0.0 3.0.0
postgis Funciones y tipos espaciales de geometría y geografía de PostGIS 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgis_raster Funciones y tipos de trama de PostGIS 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgis_sfcgal Funciones de PostGIS SFCGAL 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgis_tiger_geocoder Geocoder de PostGIS tiger y geocoder inverso 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgis_topology Funciones y tipos espaciales de topología PostGIS 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgres_fdw Contenedor de datos externos para servidores PostgreSQL remotos 1.1 1.1 1.1 1.1 1,0 1,0 1,0
postgres_protobuf Búferes de protocolo para PostgreSQL 0,2 0,2 0,2 0,2 0,2 0,2 N/D
semver Tipo de datos de versión semántica 0.32.1 0.32.1 0.32.0 0.32.0 0.32.0 0.32.0 0.32.0
session_variable Session_variable: registro y manipulación de variables y constantes de sesión 3.3 3.3 3.3 3.3 3.3 3.3 3.3
sslinfo Información sobre los certificados SSL 1.2 1.2 1.2 1.2 1.2 1.2 1.2
tablefunc Funciones que manipulan la totalidad del contenido de las tablas, incluidas tablas de referencias cruzadas 1,0 1,0 1,0 1,0 1,0 1,0 1,0
tds_fdw Contenedor de datos externos para consultar una base de datos de TDS (Sybase o Microsoft SQL Server) 2.0.3 2.0.3 2.0.3 2.0.3 2.0.3 2.0.3 2.0.3
timescaledb Habilita las inserciones escalables y las consultas complejas para los datos de serie temporal N/D 2.13.0 ✔️ 2.10.0 ✔️ 2.10.0 ✔️ 2.10.0 ✔️ 2.10.0 ✔️ 1.7.4 ✔️
tsm_system_rows Método TABLESAMPLE que acepta el número de filas como un límite. 1,0 1,0 1,0 1,0 1,0 1,0 1.0
tsm_system_time Método TABLESAMPLE que acepta el tiempo en milisegundos como un límite. 1,0 1,0 1,0 1,0 1,0 1,0 1.0
unaccent Diccionario de búsqueda de texto que quita los acentos 1.1 1.1 1.1 1.1 1.1 1.1 1.1
uuid-ossp Genera identificadores únicos universales (UUID). 1.1 1.1 1.1 1.1 1.1 1.1 1.1
vector Tipos de datos vectoriales y métodos de acceso ivfflat y hnsw 0.7.0 0.7.0 0.7.0 0.7.0 0.7.0 0.7.0 0.5.1

Actualización de extensiones de PostgreSQL

Las actualizaciones locales de las extensiones de base de datos se permiten mediante un comando sencillo. Esta característica permite a los clientes actualizar automáticamente sus extensiones de terceros a las versiones más recientes, y mantener sistemas actuales y seguros sin esfuerzo manual.

Actualización de extensiones

Para actualizar una extensión instalada a la versión más reciente disponible compatible con Azure, use el siguiente comando SQL:

ALTER EXTENSION <extension_name> UPDATE;

Este comando simplifica la administración de extensiones de base de datos, ya que permite a los usuarios actualizar manualmente a la versión más reciente aprobada por Azure, lo que mejora la compatibilidad y la seguridad.

Limitaciones

Aunque la actualización de extensiones es sencilla, existen ciertas limitaciones:

  • Selección de una versión específica: el comando no admite la actualización a versiones intermedias de una extensión. Siempre se actualiza a la versión más reciente disponible.
  • Degradación: no admite la degradación de una extensión a una versión anterior. Si es necesario cambiar a una versión anterior, puede requerir asistencia de soporte técnico y depende de la disponibilidad de la versión anterior.

Extensiones instaladas

Para enumerar las extensiones instaladas actualmente en la base de datos, use el siguiente comando SQL:

SELECT * FROM pg_extension;

Extensiones disponibles y sus versiones

Para comprobar qué versiones de una extensión están disponibles para la instalación actual de la base de datos, consulte la vista de catálogo del sistema de pg_available_extensions. Por ejemplo, para determinar la versión disponible para la extensión azure_ai, ejecute:

SELECT * FROM pg_available_extensions WHERE name = 'azure_ai';

Estos comandos proporcionan las conclusiones necesarias sobre las configuraciones de extensión de la base de datos, lo que ayuda a mantener los sistemas de forma eficaz y segura. Al habilitar actualizaciones sencillas a las versiones de extensión más recientes, Azure Database for PostgreSQL sigue admitiendo la administración sólida, segura y eficaz de las aplicaciones de base de datos.

Consideraciones específicas del servidor flexible de Azure Database for PostgreSQL

A continuación se muestra una lista de extensiones admitidas que requieren algunas consideraciones específicas cuando se usan en el servicio de servidor flexible de Azure Database for PostgreSQL. La lista está ordenada alfabéticamente.

dblink permite conectarse desde una instancia de servidor flexible de Azure Database for PostgreSQL a otra o a otra base de datos del mismo servidor. El servidor flexible de Azure Database for PostgreSQL admite conexiones entrantes y salientes a cualquier servidor PostgreSQL. El servidor de envío debe permitir conexiones de salida al servidor de recepción. Del mismo modo, el servidor de recepción debe permitir conexiones del servidor de envío.

Se recomienda implementar los servidores con integración de red virtual si tiene previsto usar esta extensión. De forma predeterminada, la integración de red virtual permite conexiones entre servidores de la red virtual. También puede elegir usar grupos de seguridad de red de red virtual para personalizar el acceso.

pg_buffercache

pg_buffercache se puede usar para estudiar el contenido de shared_buffers. Con esta extensión puede indicar si una relación determinada está almacenada en caché o no (en shared_buffers). Esta extensión puede ayudarle a solucionar problemas de rendimiento (problemas de rendimiento relacionados con el almacenamiento en caché).

Esta extensión se integra con la instalación principal de PostgreSQL y es fácil de instalar.

CREATE EXTENSION pg_buffercache;

pg_cron

pg_cron es un programador de trabajos sencillo basado en cron para PostgreSQL que se ejecuta dentro de la base de datos como una extensión. La extensión pg_cron se puede usar para ejecutar tareas de mantenimiento programadas dentro de una base de datos PostgreSQL. Por ejemplo, puede ejecutar un vaciado periódico de una tabla o quitar trabajos de datos antiguos.

pg_cron puede ejecutar varios trabajos en paralelo, pero ejecuta como máximo una sola instancia de un determinado trabajo a la vez. Si se supone que debe comenzar una segunda ejecución antes de que finalice la primera, la segunda ejecución se pone en cola y se inicia en cuanto se completa la primera. De este modo, se garantiza que los trabajos se ejecuten exactamente tantas veces como estén programados y no se ejecuten simultáneamente con ellos mismos.

He aquí algunos ejemplos:

Para eliminar datos antiguos el sábado a las 3:30 a. m. (GMT).

SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);

Ejecutar el vacío todos los días a las 10:00 a. m. de la mañana (GMT) en la base de datos predeterminada postgres.

SELECT cron.schedule('0 10 * * *', 'VACUUM');

Para anular la programación de todas las tareas de pg_cron.

SELECT cron.unschedule(jobid) FROM cron.job;

Para ver todos los trabajos programados actualmente con pg_cron.

SELECT * FROM cron.job;

Para ejecutar el vacío todos los días a las 10:00 a. m. (GMT) en la base de datos "testcron" en azure_pg_admin cuenta de rol.

SELECT cron.schedule_in_database('VACUUM','0 10 * * * ','VACUUM','testcron',null,TRUE);

Nota:

La extensión pg_cron se carga previamente en shared_preload_libraries cada instancia de servidor flexible de Azure Database for PostgreSQL dentro de la base de datos Postgres para ofrecerle la capacidad de programar trabajos para que se ejecuten en otras bases de datos dentro de su instancia de servidor flexible de Azure Database para PostgreSQL sin comprometer la seguridad. Sin embargo, por razones de seguridad, debe permitir la extensión de la lista pg_cron e instalarla mediante comando CREATE EXTENSION.

A partir de pg_cron versión 1.4, puede usar las funciones cron.schedule_in_database y cron.alter_job para programar el trabajo en una base de datos específica y actualizar una programación existente, respectivamente.

He aquí algunos ejemplos:

En este ejemplo se eliminan datos antiguos el sábado a las 3:30 a. m. (GMT) en la base de datos DBName

SELECT cron.schedule_in_database('JobName', '30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$,'DBName');

Nota:

La función cron_schedule_in_database permite el nombre de usuario como parámetro opcional. Para establecer el nombre de usuario en un valor que no sea NULL se necesitan privilegios de superusuario de PostgreSQL y no se admite en el servidor flexible de Azure Database for PostgreSQL. En los ejemplos anteriores se muestra la ejecución de esta función con el parámetro de nombre de usuario opcional omitido o establecido en NULL, que ejecuta el trabajo en el contexto de la programación del trabajo por parte del usuario, que debe tener los privilegios de rol azure_pg_admin.

Para actualizar o cambiar el nombre de la base de datos de la programación existente

SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');

pg_failover_slots

La extensión PG Failover Slots mejora el servidor flexible de Azure Database for PostgreSQL cuando se trabaja con servidores habilitados para replicación lógica y alta disponibilidad. Aborda eficazmente el desafío dentro del motor de PostgreSQL estándar que no conserva las ranuras de replicación lógica después de una conmutación por error. Mantener estas ranuras es fundamental para evitar pausas de replicación o errores de coincidencia de datos durante los cambios en el rol de servidor principal, lo que garantiza la continuidad operativa y la integridad de los datos.

La extensión simplifica el proceso de conmutación por error mediante la administración de la transferencia, la limpieza y la sincronización necesarias de las ranuras de replicación, lo que proporciona una transición sin problemas durante los cambios en el rol de servidor. La extensión es compatible con las versiones 11 y 16 de PostgreSQL.

Puede encontrar más información y cómo usar la extensión de ranuras de conmutación por error de PG en su página de GitHub.

Habilitar pg_failover_slots

Para habilitar la extensión de ranuras de conmutación por error de PG para la instancia de servidor flexible de Azure Database for PostgreSQL, debe modificar la configuración del servidor mediante la inclusión de la extensión en las bibliotecas de precarga compartida del servidor y ajustar un parámetro de servidor específico. Este es el proceso:

  1. Agregue pg_failover_slots a las bibliotecas de precarga compartidas del servidor actualizando el parámetro shared_preload_libraries.
  2. Cambie el parámetro del servidor de hot_standby_feedback a on.

Los cambios en el parámetro shared_preload_libraries requieren un reinicio del servidor para surtir efecto.

Mediante Azure Portal:

  1. Seleccione la instancia de servidor flexible de Azure Database for PostgreSQL.
  2. En el menú de recursos, en sección Configuración, seleccione Parámetros del servidor.
  3. Busque el parámetro shared_preload_libraries y edite su valor para incluir pg_failover_slots.
  4. Busque el parámetro hot_standby_feedback y establezca su valor en on.
  5. Seleccione Guardar para conservar los cambios. Ahora, tiene la opción de Guardar y reiniciar. Elija esto para asegurarse de que los cambios surtan efecto, ya que modificar shared_preload_libraries requiere un reinicio del servidor.

Al seleccionar Guardar y reiniciar, el servidor se reinicia automáticamente, aplicando los cambios que acaba de realizar. Una vez que el servidor vuelve a estar en línea, la extensión de ranuras de conmutación por error de PG está habilitada y operativa en la instancia principal del servidor flexible de Azure Database for PostgreSQL, lista para controlar las ranuras de replicación lógica durante las conmutaciones por error.

pg_hint_plan

pg_hint_plan permite ajustar los planes de ejecución de PostgreSQL mediante "sugerencias" en los comentarios de SQL, como:

/*+ SeqScan(a) */

pg_hint_plan lee frases de sugerencia en un comentario de una forma especial proporcionada con la instrucción SQL de destino. La forma especial comienza por la secuencia de caracteres "/*+" y termina con "*/". Las frases de sugerencia están formadas por el nombre de la sugerencia y los parámetros siguientes entre paréntesis y delimitados por espacios. Las nuevas líneas de legibilidad pueden delimitar cada frase de sugerencia.

Ejemplo:

  /*+
      HashJoin(a b)
      SeqScan(a)
    */
    SELECT *
      FROM pgbench_branches b
      JOIN pgbench_accounts an ON b.bid = a.bid
     ORDER BY a.aid;

El ejemplo anterior hace que el planificador use los resultados de un seq scan en la tabla a que se combinará con la tabla b como un hash join.

Para instalar pg_hint_plan, además, para permitir su enumeración, como se muestra en cómo usar extensiones de PostgreSQL, debe incluirla en las bibliotecas de precarga compartidas del servidor. Si cambia el parámetro shared_preload_libraries de Postgres deberá shared_preload_libraries para que tenga efecto. Puede cambiar los parámetros mediante Azure Portal o la CLI de Azure.

Mediante Azure Portal:

  1. Seleccione la instancia de servidor flexible de Azure Database for PostgreSQL.
  2. En el menú de recursos, en sección Configuración, seleccione Parámetros del servidor.
  3. Busque el parámetro shared_preload_libraries y edite su valor para incluir pg_hint_plan.
  4. Seleccione Guardar para conservar los cambios. Ahora, tiene la opción de Guardar y reiniciar. Elija esto para asegurarse de que los cambios surtan efecto, ya que modificar shared_preload_libraries requiere un reinicio del servidor. Ahora puede habilitar pg_hing_plan en su base de datos del servidor flexible de Azure Database for PostgreSQL. Conéctese a la base de datos y ejecute el comando siguiente:
CREATE EXTENSION pg_hint_plan;

pg_prewarm

La extensión pg_prewarm carga los datos relacionales en la memoria caché. El precalentamiento de las memorias caché significa que las consultas tengan mejores tiempos de respuesta en su primera ejecución después de un reinicio. La función de precalentamiento automático no está disponible actualmente en el servidor flexible Azure Database for PostgreSQL.

pg_repack

Una pregunta típica que hacen las personas cuando intentan usar esta extensión es: ¿es pg_repack una extensión o un ejecutable del lado cliente, como psql o pg_dump?

La respuesta a eso es que es realmente ambas. pg_repack/lib contiene el código de la extensión, incluidos los artefactos de esquema y SQL que crea, y la biblioteca de C que implementa el código de varias de esas funciones. Por otro lado, pg_repack/bin mantiene el código de la aplicación cliente, que sabe cómo interactuar con los artefactos de programación creados por la extensión. Esta aplicación cliente tiene como objetivo facilitar la complejidad de interactuar con las diferentes interfaces expuestas por la extensión del lado servidor, por medio de ofrecer al usuario algunas opciones de línea de comandos que son más fáciles de entender. La aplicación cliente sin la extensión creada en la base de datos a la que apunta es inútil. La extensión del lado servidor por sí misma sería totalmente funcional, pero requeriría que el usuario comprenda un patrón de interacción complicado que consiste en ejecutar consultas para recuperar datos que se usan como entrada para las funciones implementadas por la extensión.

Permiso denegado para volver a empaquetar el esquema

A partir de ahora, debido a la forma en que concedemos permisos al esquema de reempaquetado creado por esta extensión, solo se admite la ejecución de pg_repack funcionalidad desde el contexto de azure_pg_admin.

Es posible que observe que si el propietario de una tabla, que no es azure_pg_admin, intenta ejecutar pg_repack, terminan recibiendo un error similar al siguiente:

NOTICE: Setting up workers.conns
ERROR: pg_repack failed with error: ERROR:  permission denied for schema repack
LINE 1: select repack.version(), repack.version_sql()

Para evitar ese error, asegúrese de ejecutar pg_repack desde el contexto de azure_pg_admin.

pg_stat_statements

La extensión pg_stat_statements proporciona una vista de todas las consultas que se han ejecutado en la base de datos. Esto es útil para comprender el aspecto del rendimiento de la carga de trabajo de consultas en un sistema de producción.

La extensión pg_stat_statements se carga previamente en shared_preload_libraries cada instancia de servidor flexible de Azure Database for PostgreSQL para proporcionar un medio de seguimiento de las estadísticas de ejecución de instrucciones SQL. Sin embargo, por motivos de seguridad, todavía tiene que lista de permitidos pg_stat_statements extensión e instalarla mediante comando CREATE EXTENSION. La configuración pg_stat_statements.track, que controla las instrucciones que la extensión cuenta, se establece de manera predeterminada en top, lo que significa que se realiza el seguimiento de todas las instrucciones que los clientes emiten directamente. Los otros dos niveles de seguimiento son none y all. Esta configuración se puede configurar como parámetro de servidor.

Hay un equilibrio entre la información de ejecución de consultas que pg_stat_statements proporciona y el efecto en el rendimiento del servidor al registrar cada instrucción SQL. Si no usa activamente la extensión pg_stat_statements, se recomienda establecer pg_stat_statements.track en none. Algunos servicios de supervisión de terceros pueden depender de pg_stat_statements para ofrecer información de rendimiento de consultas, así que confirme si este es el caso para usted o no.

postgres_fdw

postgres_fdw permite conectarse desde una instancia de servidor flexible de Azure Database for PostgreSQL a otra o a otra base de datos del mismo servidor. El servidor flexible de Azure Database for PostgreSQL admite conexiones entrantes y salientes a cualquier servidor PostgreSQL. El servidor de envío debe permitir conexiones de salida al servidor de recepción. Del mismo modo, el servidor de recepción debe permitir conexiones del servidor de envío.

Se recomienda implementar los servidores con integración de red virtual si tiene previsto usar esta extensión. De forma predeterminada, la integración de red virtual permite conexiones entre servidores de la red virtual. También puede elegir usar grupos de seguridad de red de red virtual para personalizar el acceso.

pgstattuple

Al usar la extensión "pgstattuple" para intentar obtener estadísticas de tupla de objetos conservados en el esquema de pg_toast en versiones de Postgres 11 a 13, recibirá un error de "permiso denegado para el esquema pg_toast".

Permiso denegado para el esquema pg_toast

Los clientes que usen las versiones 11 y 13 de PostgreSQL en Azure Database para el servidor flexible no podrán usar la extensión pgstattuple en los objetos que haya dentro del esquema de pg_toast.

En PostgreSQL 16 y 17, el rol de pg_read_all_data se concede automáticamente a azure_pg_admin, lo que permite que pgstattuple funcione correctamente. En PostgreSQL 14 y 15, los clientes pueden conceder manualmente el rol de pg_read_all_data a azure_pg_admin para lograr el mismo resultado. Sin embargo, en PostgreSQL 11 a 13, el rol de pg_read_all_data no existe.

Los clientes no pueden conceder directamente los permisos necesarios. En caso de necesitar ejecutar pgstattuple para acceder a objetos en el esquema de pg_toast, continúe con crear una solicitud de soporte técnico de Azure.

TimescaleDB

TimescaleDB es una base de datos de serie temporal que se empaqueta como una extensión para PostgreSQL. TimescaleDB proporciona funciones analíticas orientadas al tiempo, optimizaciones y escala Postgres para las cargas de trabajo de serie temporal. Más información sobre TimescaleDB, una marca registrada de Timescale, Inc. El servidor flexible de Azure Database for PostgreSQL proporciona la edición Apache-2 de TimescaleDB.

Instalación de TimescaleDB

Para instalar TimescaleDB, además de permitir su enumeración, como se muestra anteriormente, debe incluirlo en las bibliotecas de precarga compartida del servidor. Si cambia el parámetro shared_preload_libraries de Postgres deberá shared_preload_libraries para que tenga efecto. Puede cambiar los parámetros mediante Azure Portal o la CLI de Azure.

Mediante Azure Portal:

  1. Seleccione la instancia de servidor flexible de Azure Database for PostgreSQL.
  2. En el menú de recursos, en sección Configuración, seleccione Parámetros del servidor.
  3. Busque el parámetro shared_preload_libraries y edite su valor para incluir TimescaleDB.
  4. Seleccione Guardar para conservar los cambios. Ahora, tiene la opción de Guardar y reiniciar. Elija esto para asegurarse de que los cambios surtan efecto, ya que modificar shared_preload_libraries requiere un reinicio del servidor. Ahora puede habilitar TimescaleDB en su base de datos del servidor flexible de Azure Database for PostgreSQL. Conéctese a la base de datos y ejecute el comando siguiente:
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

Sugerencia

Si ve un error, confirme que ha reiniciado el servidor después de guardar shared_preload_libraries.

Ahora puede crear una hipertabla de TimescaleDB desde cero o migrar datos de serie temporal existentes en PostgreSQL.

Restauración de una base de datos de Timescale mediante pg_dump y pg_restore

Para restaurar una base de datos de Timescale mediante pg_dump y pg_restore, tiene que ejecutar dos procedimientos auxiliares en la base de datos de destino: timescaledb_pre_restore() y timescaledb_post restore().

Primero prepare la base de datos de destino:

--create the new database where you want to perform the restore
CREATE DATABASE tutorial;
\c tutorial --connect to the database
CREATE EXTENSION timescaledb;

SELECT timescaledb_pre_restore();

Ahora puede ejecutar pg_dump en la base de datos original y, a continuación, pg_restore. Después de la restauración, asegúrese de ejecutar el siguiente comando en la base de datos restaurada:

SELECT timescaledb_post_restore();

Para obtener más información sobre el método de restauración con la base de datos habilitada para escala temporal, consulte documentación de Timescale.

Restauración de una base de datos de escala de tiempo mediante timescaledb-backup

Al ejecutar el procedimiento SELECT timescaledb_post_restore() mencionado anteriormente, es posible que se denieguen permisos al actualizar la marca timescaledb.restoring. Esto se debe a un permiso ALTER DATABASE limitado en los servicios de base de datos PaaS en la nube. En este caso, puede usar un método alternativo mediante la herramienta timescaledb-backup para hacer una copia de seguridad y restaurar la base de datos de escala de tiempo. Timescaledb-backup es un programa para facilitar el volcado y la restauración de una base de datos de TimescaleDB, que sean menos propensos a errores y mejorar el rendimiento.
Para ello, debe hacer lo siguiente

  1. Instale las herramientas como se detalla aquí.
    1. Creación de una instancia y base de datos de destino de servidor flexible de Azure Database for PostgreSQL
    2. Habilite la extensión de escala de tiempo como se ha mostrado anteriormente.
    3. Conceda el rol azure_pg_admin al usuario que usará ts-restore.
    4. Ejecute ts-restore para restaurar la base de datos

Aquí puede obtener más información sobre estas utilidades.

Extensiones y actualización de versión principal

El servidor flexible de Azure Database for PostgreSQL ha introducido la característica de actualización local de versiones principales localesque realiza una actualización local de la instancia de servidor flexible de Azure Database for PostgreSQL con un solo clic. La actualización de la versión principal local simplifica el proceso de actualización del servidor flexible de Azure Database for PostgreSQL, lo que minimiza la interrupción de los usuarios y las aplicaciones que acceden al servidor. La actualización de la versión principal local no admite extensiones específicas y hay algunas limitaciones para actualizar determinadas extensiones. Las extensiones anon, Apache AGE, dblink, orafce, pgaudit, postgres_fdw, y Timescaledb no son compatibles con todas las versiones de servidor flexible de Azure Database for PostgreSQL al usar característica de actualización de versión principal local.