Compartir a través de


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

En este artículo se describen algunas consideraciones especiales que debe tener en cuenta al usar determinadas extensiones en una instancia de servidor flexible de Azure Database for PostgreSQL.

Requisitos previos

Lea el artículo Uso de extensiones de PostgreSQL para Azure Database for PostgreSQL para obtener información sobre cómo:

  • Incluir en la lista de permitidas extensiones en el servidor flexible de Azure Database for PostgreSQL
  • Cargar las bibliotecas de las extensiones que implementan bibliotecas binarias, que requieren asignar y acceder a la memoria compartida y deben cargarse cuando se inicia el servidor.
  • Instalar extensiones en alguna base de datos para que los objetos de SQL empaquetados en esa extensión se implementen en esa base de datos y se pueda tener acceso a ellos en su contexto.
  • Anule extensiones de alguna base de datos para que los objetos de SQL empaquetados en esa extensión se quiten de esa base de datos.
  • Actualice los artefactos de SQL implementados por una extensión que ya está instalada.
  • Vea qué extensiones se instalan y sus versiones correspondientes.
  • Obtenga información sobre los posibles errores que puede recibir al administrar extensiones en el servidor flexible de Azure Database for PostgreSQL y cuál podría ser la causa de cada uno de ellos.

Extensiones

En la siguiente lista se enumeran todas las extensiones admitidas que requieren consideraciones específicas cuando se usan en el servicio de servidor flexible de Azure Database for PostgreSQL:

  • dblink
  • pg_buffercache
  • pg_cron
  • pg_failover_slots
  • pg_hint_plan
  • pg_prewarm
  • pg_repack
  • pg_stat_statements
  • postgres_fdw
  • pgstattuple

La extensión 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 manera 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

La extensión pg_buffercache se puede usar para estudiar el contenido de shared_buffers. Con esta extensión, puede saber si una relación determinada está almacenada en caché (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

La extensión 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 puede 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.

La extensión del navegador pg_cron puede ejecutar varios trabajos en paralelo, pero ejecuta como máximo una instancia de un 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, garantiza que los trabajos se ejecuten exactamente tantas veces como estén programados y no se ejecuten simultáneamente con ellos mismos.

Asegúrese de que el valor en el que se establece shared_preload_libraries, incluye pg_cron. Esta extensión no admite la carga de la biblioteca como efecto de ejecutar CREATE EXTENSION. Cualquier intento de ejecutar CREATE EXTENSION si la extensión no se ha agregado a shared_preload_libraries, o el servidor no se ha reiniciado después de agregarlo, produce un error cuyo texto indica pg_cron can only be loaded via shared_preload_libraries y cuya sugerencia es Add pg_cron to the shared_preload_libraries configuration variable in postgresql.conf.

Para usar pg_cron, asegúrese de que su biblioteca está agregada para ser cargada al iniciar el servidor, está en la lista de permitidas y está instalada en cualquier base de datos desde la que quiera interactuar con su funcionalidad, mediante los artefactos de SQL que crea.

Ejemplos

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

    SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
    
  2. Para ejecutar el vaciado todos los días a las 10:00 (GMT) en la base de datos postgres predeterminada.

    SELECT cron.schedule('0 10 * * *', 'VACUUM');
    
  3. Para anular la programación de todas las tareas de pg_cron.

    SELECT cron.unschedule(jobid) FROM cron.job;
    
  4. Para ver todos los trabajos programados actualmente con pg_cron.

    SELECT * FROM cron.job;
    
  5. Para ejecutar el vaciado todos los días a las 10:00 (GMT) en la base de datos test cron en la cuenta de rol azure_pg_admin.

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

Más ejemplos

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

La función cron_schedule_in_database permite el nombre de usuario como un 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 un parámetro de nombre de usuario opcional omitido o establecido en null, que ejecuta el trabajo en el contexto del usuario que programa el trabajo, que debe tener los privilegios de rol azure_pg_admin.

  1. Para eliminar datos antiguos el sábado a las 3:30 (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');
    
  2. 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.

Puede encontrar más información e instrucciones sobre el uso de la extensión pg_failover_slots en su página de GitHub.

Para usar la extensión pg_failover_slots, asegúrese de que su biblioteca se cargó cuando se inició el servidor.

pg_hint_plan

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

/*+ SeqScan(a) */

La extensión pg_hint_plan lee las frases de sugerencia de un comentario de la forma especial proporcionada con la instrucción SQL de destino. La forma en particular comienza con la secuencia de caracteres "/*+" y termina con "*/". Las frases de sugerencia están formadas por los nombres de las sugerencias 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 seqscan en la tabla a que se combinará con la tabla b como un hashjoin.

Para usar la extensión pg_hint_plan, asegúrese de permitir la extensión en la lista de permitidas, cargar su biblioteca e instalarla en la base de datos en la que piensa usar su funcionalidad.

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 funcionalidad de precalentamiento automático para el servidor flexible de PostgreSQL no está disponible actualmente en Azure Database.

pg_repack

Los usuarios que utilizan por primera vez la extensión pg_repack suelen hacerse la siguiente pregunta: ¿Es pg_repack una extensión o un ejecutable del lado del cliente como psql o pg_dump?

pg_repack es en realidad ambas cosas. pg_repack/lib contiene el código de la extensión, incluidos los artefactos de esquema y SQL que crea, y la biblioteca C que implementa el código de varias de esas funciones.

Por otro lado, pg_repack/bin tiene el código para la aplicación cliente, que sabe cómo interactuar con los elementos de programación implementados en la extensión. El objetivo de esta aplicación cliente es facilitar la interacción con las distintas interfaces de la extensión del servidor. Ofrece al usuario algunas opciones de línea de comandos más fáciles de entender. La aplicación cliente es inútil sin la extensión creada en la base de datos a la que apunta. La extensión del lado del servidor por sí sola sería totalmente funcional, pero requeriría que el usuario entendiera un complicado patrón de interacción. Ese patrón consistiría en ejecutar consultas para recuperar datos que se utilizan como entrada para funciones implementadas por la extensión, etc.

Permiso denegado para volver a empaquetar el esquema

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

Es posible que observe que si el propietario de una tabla, a excepción de azure_pg_admin, intenta ejecutar pg_repack, termina 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, ejecute 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 ejecutan en la base de datos. Esto resulta útil para comprender el rendimiento de la carga de trabajo de consulta en un sistema de producción.

La extensión pg_stat_statements se carga previamente en shared_preload_libraries en cada instancia de servidor flexible de Azure Database for PostgreSQL para proporcionar un medio de seguimiento de las estadísticas de ejecución de las instrucciones SQL.

Por motivos de seguridad, debe incluir en la lista de permitidos la extensión pg_stat_statements e instalarla mediante el comando CREATE EXTENSION.

La configuración pg_stat_statements.track, que controla las instrucciones que la extensión rastrea, 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 proporciona la extensión pg_stat_statements y el rendimiento del servidor a medida que registra 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, por lo que debe confirmar si este su caso.

postgres_fdw

La extensión 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 manera 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 pg_toast en las versiones 11 a 13 de Postgres, recibe un error de "permiso denegado para el esquema pg_toast".

Permiso denegado para el esquema pg_toast

Los clientes que usan las versiones 11 a 13 de PostgreSQL en Azure Database para el servidor flexible no pueden usar la extensión pgstattuple en los objetos que haya dentro del esquema 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 las versiones 11 a 13 de PostgreSQL, el rol 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 del esquema pg_toast, cree una solicitud de Soporte técnico de Azure.

timescaleDB

La extensión timescaleDB es una base de datos de series temporales empaquetada como una extensión para PostgreSQL. Proporciona funciones analíticas orientadas al tiempo y optimizaciones, y escala Postgres para las cargas de trabajo de series temporales. 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 usar timescaleDB, asegúrese de permitir la extensión en la lista de permitidas, cargar su biblioteca e instalarla en la base de datos en la que piensa usar su funcionalidad.

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 una base de datos habilitada para Timescale, consulte la 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(), es posible que se denieguen los 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 Timescale. 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, siga los pasos que se indican a continuación:

  1. Instale las herramientas como se detalla aquí.

  2. Cree una instancia y base de datos de destino de servidor flexible de Azure Database for PostgreSQL.

  3. Habilite la extensión Timescale.

  4. Conceda el rol azure_pg_admin al usuario utilizado por ts-restore.

  5. 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 ofrece una característica de actualización de versión principal local, que realiza una actualización local de la instancia de servidor flexible de Azure Database for PostgreSQL con solo una interacción sencilla del usuario. 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. Las actualizaciones locales de la versión principal no admiten 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 del servidor flexible de Azure Database for PostgreSQL al usar la característica de actualización local de la versión principal.