pg_durable: Microsoft abre el código de la ejecución durable en la base de datos
Resumen
- pg_durable se ve como parte de una tendencia más amplia de 2026 de “Postgres como cola/orquestador”, junto con otros sistemas de trabajos/colas basados en PG.
- La discusión se divide entre quienes se entusiasman con “llevar el cómputo a los datos” y quienes prefieren firmemente la orquestación y la lógica de negocio en el código de la aplicación.
Ejecución durable en la BD vs orquestadores externos
- Los partidarios argumentan: si Postgres es el principal componente con estado, mantener los flujos de trabajo dentro de la BD simplifica la pila, evita infraestructura adicional (p. ej., Temporal, Airflow), reduce la latencia y los ida y vuelta, y permite que las instantáneas de la base capturen tanto los datos como el estado del flujo de trabajo.
- Los críticos: para flujos de trabajo entre sistemas, los orquestadores externos y los programadores de DAG (Airflow, sistemas tipo Temporal) se consideran una mejor opción; mantienen el control de flujo en lenguajes y cadenas de herramientas familiares.
Casos de uso y beneficios mencionados
- Flujos de trabajo de larga duración / reanudables, pipelines ETL/IA, trabajos tipo cron con semántica exactly-once y reintento desde puntos de control.
- Capacidad de restaurar el “punto en el tiempo” incluyendo los flujos de trabajo, útil para ETL y pipelines de IA estrechamente acoplados al estado de la BD.
- Ayuda cuando las llamadas HTTP y el procesamiento son mayormente orientados a datos y ya apuntan a la base de datos.
Preocupaciones y críticas
- “Huele a procedimientos almacenados”: temor a lógica de negocio oculta, mala observabilidad, presión de escalado centralizada en la BD, IO limitado e integración limitada con APIs externas.
- Problemas de experiencia de desarrollo: sintaxis SQL/DSL incómoda, depuración difícil, herramientas limitadas frente a lenguajes principales y flujos CI/CD.
- Preocupación por cargar bases de datos ya difíciles de escalar con trabajos de larga duración.
Herramientas, versionado y pruebas
- Varios comentarios preguntan cómo versionar, probar, depurar y liberar funciones durables.
- Algunos sostienen que todos los objetos de BD (funciones, triggers) ya deberían estar en control de स्रोत y migraciones; otros dicen que la mayoría de los equipos no tiene flujos de trabajo de BD maduros, así que mantener la lógica en código es más seguro.
Cómo se comporta pg_durable (según el hilo)
- Los flujos de trabajo se definen e inician mediante
df.start(...), devolviendo un ID de instancia. df.wait_for_signales por instancia y “exactly once” dentro de esa instancia; llamadas repetidas adf.startcrean nuevas instancias.- Los timeouts y el manejo de errores se presentan como estado del flujo de trabajo e instancias fallidas, aunque la semántica detallada de errores sigue siendo algo poco clara para los lectores.
Meta: Postgres, extensiones y Rust
- Debate secundario sobre si Postgres es lo suficientemente extensible (muchos citan el rico ecosistema de extensiones) frente a pedidos de una reescritura en Rust con una arquitectura más modular.
- Algunos ven la orquestación en la BD como un efecto de plataforma interna; otros la ven como una reutilización pragmática de un sistema maduro y extensible.