Blog

Noticias

Extensión de compatibilidad DBMS_JOB para PostgreSQL

Extensión de compatibilidad DBMS_JOB para PostgreSQL

pg_dbms_job es una nueva extensión para PostgreSQL que permite crear, gestionar y utilizar trabajos programados DBMS_JOB al estilo de Oracle. Su uso y comportamiento es idéntico al del paquete DBMS_JOB de Oracle.

Ha sido lanzado pg_dbms_job v1.0.1, la primera versión de la extensión compatible con las versiones PostgreSQL que van desde la 9.1 hasta la actual.

Permite gestionar trabajos programados desde una cola de trabajos o ejecutar de inmediato trabajos de forma asíncrona. Un trabajo consta de un código a ejecutar, de la siguiente fecha de ejecución y de la frecuencia de ejecución del mismo trabajo. El trabajo ejecuta un comando SQL, un código plpgsql o un procedimiento almacenado existente.

Si se invoca el procedimiento almacenado submit sin los atributos next_date (cuándo) e interval (con qué frecuencia), se ejecutará de inmediato el trabajo en un proceso asíncrono. Si interval es NULL y si next_date es menor o igual que el timestamp actual el trabajo también se ejecutará de inmediato como proceso asíncrono. En todos los demás casos, el trabajo se iniciará cuando corresponda, aunque si interval es NULL, el trabajo se ejecutará sólo una vez y luego será eliminado.

Si un trabajo programado se completa con éxito, su nueva fecha de ejecución se coloca en next_date. La nueva fecha se calcula evaluando la expresión SQL definida como interval. El parámetro interval debe ser evaluado en un momento en el futuro.

Esta extensión consiste en un script SQL que permite crear todos los objetos relacionados con su funcionamiento y un daemon que deberá ejecutarse de forma conjunta a la base de datos en la que se definen los trabajos. El daemon se encargará de ejecutar los trabajos asíncronos en cola así como los programados. Puede ejecutarse en el mismo host de la base de datos en la que se definen los trabajos, o en cualquier otro host. El tiempo de programación se obtiene del host de la base de datos y no de la ubicación en la que se ejecuta el daemon.

El número de trabajos que puede ejecutarse de forma simultánea está limitado por defecto a 1000. Si se alcanza este límite, el daemon esperará a que finalice un proceso antes de ejecutar uno nuevo.

El uso de un daemon planificador externo en lugar de un worker en segundo plano es una de las opciones. La posibilidad de lanzar miles de subprocesos desde un worker en segundo plano no es una buena idea.

La ejecución de un trabajo se produce por un evento NOTIFY que el planificador recibe al enviar o modificar un nuevo trabajo. Las notificaciones son sondeadas cada 0,1 segundos. Cuando no existe ninguna notificación, el programador sondea cada job_queue_interval segundos (5 segundos por defecto) las tablas donde se almacenan las definiciones de los trabajos. Esto significa que, en el peor de los casos, un trabajo se ejecutará job_queue_interval segundos tras la siguiente fecha de ejecución establecida.

Para más información, consulten la documentación de pg_dbms_job.

Enlaces y créditos

pg_dbms_job es un proyecto abierto, bajo licencia PostgreSQL, creado por Gilles Darold en MigOps Inc como parte de las mejoras realizadas a Ora2Pg. Se agradece cualquier contribución que nos ayude a mejorar la herramienta. Pueden enviar sus ideas, peticiones de funcionalidades o parches a través de las herramientas de GitHub.

Enlaces :

Información sobre pg_dbms_job

La extensión pg_dbms_job es un proyecto original de MigOps Inc. MigOPs está especializada en la migración a PostgreSQL y en el soporte al mismo. Contáctenos para más información. 

Documentación en https://github.com/MigOpsRepos/pg_dbms_job#readme

Haz clic aquí para leer la noticia original en inglés en la página web oficial de PostgreSQL.