pglayers: Extensiones de PostgreSQL como capas Docker modulares
🚀 Presentamos pglayers
Extensiones de PostgreSQL precompiladas disponibles como capas combinables para imágenes Docker
Proyecto: https://github.com/pglayers/pglayers
📌 Qué hace
pglayers publica 53 extensiones de PostgreSQL como imágenes Docker mínimas (FROM scratch).
Cada imagen contiene únicamente:
- Bibliotecas compartidas
- Archivos de control
- Scripts SQL
- Rutas correctas del sistema de archivos
Estas se integran con la imagen oficial de Docker de postgres mediante COPY --from:
dockerfile FROM postgres:17 COPY --from=ghcr.io/pglayers/pgx-pgvector:17 / / COPY --from=ghcr.io/pglayers/pgx-postgis:17 / / COPY --from=ghcr.io/pglayers/pgx-pg_cron:17 / /
Sin compilación.
Sin apt-get.
Sin herramientas de compilación en la imagen final.
Simplemente CREATE EXTENSION como siempre.
🟢 Imágenes listas para utilizar
Para una configuración completamente preconfigurada:
bash docker run -d -e POSTGRES_PASSWORD=s ghcr.io/pglayers/pglayers-full:17
Incluye:
- Las 53 extensiones
shared_preload_librariesya configurado
También disponible:
- Un perfil para Azure (28 extensiones) compatible con Azure Database for PostgreSQL Flexible Server.
Ideal para realizar desarrollo y pruebas en entornos locales contra servicios administrados.
📦 Extensiones incluidas
53 extensiones agrupadas en las principales categorías:
- AI/ML: pgvector
- Geoespacial: PostGIS, pgRouting, h3-pg
- Series temporales: TimescaleDB
- Analítica: pg_duckdb
- Observabilidad: pgaudit, pg_stat_monitor, pg_qualstats, pg_wait_sampling
- Programación de tareas: pg_cron
- Particionamiento: pg_partman
- Replicación: pglogical, pg_failover_slots, wal2json
- Búsqueda de texto completo: pg_textsearch, pg_bigm, rum
- Y 36 adicionales
Lista completa: https://github.com/pglayers/pglayers#available-extensions
🐘 Versiones de PostgreSQL compatibles
- PostgreSQL 17 (estable)
- PostgreSQL 18 (estable)
- PostgreSQL 19 (experimental, beta)
Todas las imágenes son compatibles con linux/amd64 y linux/arm64.
🧱 Diseño aislado para PG 18+
PostgreSQL 18 incorpora las opciones extension_control_path y dynamic_library_path.
pglayers aprovecha estas funcionalidades para ubicar cada extensión en un espacio de nombres independiente::
/extensions/<name>/
Ventajas:
- Evita conflictos entre archivos
- Permite que varias versiones de una misma biblioteca puedan coexistir
- Las extensiones pueden incorporarse durante la fase de despliegue sin necesidad de reconstruir la imagen
Ejemplo:
dockerfile COPY --from=ghcr.io/pglayers/pgx-pgvector:18 / /extensions/pgvector/ COPY --from=ghcr.io/pglayers/pgx-pg_cron:18 / /extensions/pg_cron/
PostgreSQL las localiza mediante:
extension_control_path = '/extensions/pgvector/share:/extensions/pg_cron/share:$system' dynamic_library_path = '/extensions/pgvector/lib:/extensions/pg_cron/lib:$libdir'
Totalmente compatible con CloudNativePG ≥ 1.27, que gestiona de forma automática estos GUC.
🧪 Pruebas
El conjunto de pruebas verifica:
- Que no haya conflictos de archivos entre las distintas capas
- Que los archivos de la imagen base no sean sobrescritos
- Que todas las dependencias de las bibliotecas compartidas se encuentren resueltas correctamente mediante
ldd - Que la ejecución de
CREATE EXTENSIONsea exitosa para todas las extensiones - Pruebas funcionales de validación rápida (smoke tests) y pruebas de integración
📄 Licencia
Se admiten únicamente licencias de código abierto de tipo permisivo:
- PostgreSQL
- MIT
- BSD
- Apache 2.0
- ISC
- MPL‑2.0
PostGIS y pgRouting (GPL‑2.0) están incluidos conforme a la interpretación habitual de agregación simple aplicada en el ecosistema PostgreSQL.
No se aceptan extensiones bajo licencias BSL, SSPL ni extensiones que dependan de componentes propietarios.
🤝 Contribuciones
¡Las contribuciones son bienvenidas!
Para añadir una nueva extensión es necesario incluir:
Dockerfileextension.conftest.sql
Consulten CONTRIBUTING.md para obtener más detalles.
Pueden enviar comentarios, reportar errores o solicitar nuevas extensiones a través de los Issues de GitHub.
🙏 Agradecimientos
Este proyecto es posible gracias al trabajo y las contribuciones de la comunidad de PostgreSQL:
- El Grupo Global de Desarrollo de PostgreSQL
- Los mantenedores del repositorio APT de PGDG
- Los mantenedores de la imagen oficial de PostgreSQL para Docker
- El equipo de PostgreSQL en Debian
- Todos los desarrolladores de extensiones que publican su trabajo bajo licencias permisivas
pglayers es simplemente una capa ligera de automatización que se apoya en todo ese trabajo previo. Sin la calidad, estabilidad y coherencia del ecosistema de PostgreSQL, este proyecto no habría sido posible.
¡Gracias!
Ismael Mejia

