Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se describen algunas consideraciones especiales que debe tener en cuenta al usar determinadas extensiones o módulos en una instancia de servidor flexible de Azure Database for PostgreSQL.
Consideraciones especiales sobre las extensiones
Para usar una extensión en la instancia de servidor flexible de Azure Database for PostgreSQL, debe hacer lo siguiente:
-
Permitir extensión. Si no se permite la extensión, cualquier intento de ejecutar
CREATE EXTENSION,ALTER EXTENSION,DROP EXTENSIONoCOMMENT ON EXTENSIONproduce un error que indica que no se permite la extensión a la que se hace referencia. - Si la extensión implementa una biblioteca binaria compartida que requiere asignar y acceder a la memoria compartida, y debe cargarse cuando se inicia el servidor, también debe seguir las instrucciones proporcionadas en las bibliotecas de carga.
- Cree la extensión en las bases de datos en las que desea que la extensión implemente los objetos SQL distribuidos con esa extensión.
- Quitar extensión. Si desea quitar de la base de datos en la que se ejecuta el comando todos los objetos SQL distribuidos por esa extensión.
- Actualice las extensiones para actualizar a su versión más reciente todos los artefactos sql implementados por una extensión que ya está instalada.
- Vea las extensiones instaladas y sus versiones correspondientes.
Si recibe algún error al ejecutar los CREATE EXTENSION, ALTER EXTENSION, DROP EXTENSION o COMMENT ON EXTENSION en la instancia de servidor flexible de Azure Database for PostgreSQL, revise la lista de posibles errores y la causa de cada uno de esos errores.
Consideraciones genéricas sobre los módulos
Para usar un módulo en su instancia del servidor flexible de Azure Database for PostgreSQL, solo tiene que agregarlo al parámetro de servidor shared_preload_libraries, tal como se describe en Carga de bibliotecas.
No es necesario incluir en la lista de permitidos los módulos. Es un requisito exclusivo para las extensiones.
Extensiones con consideraciones específicas
En la lista siguiente se enumeran todas las extensiones admitidas que requieren consideraciones específicas cuando se usan en una instancia de servidor flexible de Azure Database for PostgreSQL:
AGEdblinkpg_buffercachepg_cronpg_hint_planpg_prewarmpg_repackpg_stat_statementspostgres_fdwpgstattuple
AGE
La extensión Apache AGE es una extensión de grafo para PostgreSQL compatible con Azure Database for PostgreSQL. Proporciona funcionalidades de base de datos de grafos, compatibilidad con consultas de cipher abierta y la capacidad de ejecutar consultas complejas en datos de grafos almacenados en PostgreSQL. "Apache AGE" es un proyecto de código abierto publicado en apache License 2.0.
Instalar AGE
Para usar AGE, asegúrese de permitir la extensión en la lista de permitidas, cargar su biblioteca e instalar la extensión en la base de datos en la que piensa usar su funcionalidad.
dblink
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. Azure Database for PostgreSQL admite conexiones entrantes y salientes a cualquier servidor de 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 pg_buffercache extensión 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é (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 cargar su biblioteca compartida al iniciar el servidor, que esté en la lista de permitidos y que esté instalado en cualquier base de datos desde la que desee interactuar con su funcionalidad, utilizando los artefactos SQL que crea.
Examples
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'$$);Para ejecutar el vaciado todos los días a las 10:00 (GMT) en la base de datos
postgrespredeterminada.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 vaciado todos los días a las 10:00 (GMT) en la base de datos
test cronen la cuenta de rolazure_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. Si se establece el nombre de usuario en un valor distinto de NULL, se requiere el privilegio de superusuario de PostgreSQL y no se admite para una instancia de 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.
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');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_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.
Example:
/*+
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 utilizar la extensión
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 autoprewarm de PostgreSQL no está disponible actualmente en la Base de Datos de Azure.
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 tiene 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 tiene el código de 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, que no es azure_pg_admin, intenta ejecutar pg_repack, termine recibiendo el siguiente error:
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. Esta información es ú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 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.
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 es 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. Azure Database for PostgreSQL admite conexiones entrantes y salientes a cualquier servidor de 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 la instancia de servidor flexible de Azure Database for PostgreSQL no pueden usar la pgstattuple extensión en objetos dentro del pg_toast esquema.
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. Azure Database for PostgreSQL proporciona la edición TimescaleDB Apache-2.
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.
Para obtener más información sobre cómo restaurar una base de datos de escala temporal mediante pg_dump y pg_restore, consulte la documentación sobre escala temporal.
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. La razón por la que recibe este error se debe al permiso ALTER DATABASE limitado de 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 hacerlo, siga estos pasos:
Instale herramientas como se detalla aquí.
Cree una instancia y base de datos de destino de servidor flexible de Azure Database for PostgreSQL.
Habilite la extensión Timescale.
Conceda el
azure_pg_adminrol al usuario que usa ts-restore.Ejecute ts-restore para restaurar la base de datos.
Puede encontrar más información sobre estas utilidades aquí.
Extensiones y actualización de versión principal
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 una interacción sencilla del usuario. La actualización en situ de la versión principal simplifica el proceso de actualización de Azure Database for PostgreSQL y minimiza la interrupción para 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, postgres_fdw y timescaledb no son compatibles con todas las versiones de instancia de servidor flexible de Azure Database for PostgreSQL al usar la característica de actualización de versión principal in situ.
Módulos con consideraciones específicas
En la lista siguiente se enumeran todos los módulos admitidos que requieren consideraciones específicas cuando se usan en una instancia de servidor flexible de Azure Database for PostgreSQL:
pg_failover_slots
pg_failover_slots
El pg_failover_slots módulo mejora Azure Database for PostgreSQL al trabajar con la replicación lógica y los servidores habilitados para 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 del pg_failover_slots módulo en su página de GitHub.
Para usar el pg_failover_slots módulo, asegúrese de que la biblioteca se haya cargado cuando se inició el servidor.