Skip to content

PostgreSQL 16.8 con múltiples extensiones y herramientas para análisis de datos

Notifications You must be signed in to change notification settings

jporre/Postgre-168

Repository files navigation

Descripción del Dockerfile para PostgreSQL Personalizado

Este Dockerfile crea una imagen personalizada de PostgreSQL 16.8 con múltiples extensiones y herramientas para análisis de datos, seguridad, monitoreo y funcionalidades avanzadas.

Funcionamiento

El Dockerfile parte de la imagen oficial de PostgreSQL 16.8 y realiza las siguientes acciones:

  1. Instalación de dependencias básicas: Instala herramientas de desarrollo, Git, Python 3 y otras bibliotecas necesarias.

  2. Instalación de extensiones espaciales: Incluye PostGIS para funcionalidades geoespaciales.

  3. Instalación de extensiones para análisis de datos:

    • pgvector (v0.6.0): Para búsquedas vectoriales y machine learning
    • pgai (0.9.0): Inteligencia artificial integrada en PostgreSQL
    • TimescaleDB: Para series temporales
  4. Extensiones de seguridad y autenticación:

    • pgjwt: Para manejo de tokens JWT
    • pgaudit: Para auditoría de operaciones en la base de datos
  5. Herramientas de administración y monitoreo:

    • pg_cron: Programador de tareas
    • wal2json: Decodificación lógica para replicación
    • hypopg y index_advisor: Optimización de índices
    • pg_stat_monitor y pg_stat_statements: Monitoreo de rendimiento
  6. Configuración personalizada:

    • Carga varias extensiones al iniciar PostgreSQL
    • Utiliza archivos de configuración personalizados
    • Ejecuta un script de inicialización (init-db.sh)

Lista de Extensiones disponibles en esta imágen.

  1. PostGIS (postgresql-16-postgis)
  2. PLPython3 (postgresql-plpython3-16)
  3. wal2json
  4. pgvector (v0.6.0)
  5. pgai (extension-0.9.0)
  6. pgjwt
  7. pgaudit (REL_16_STABLE)
  8. pg_cron
  9. hypopg
  10. index_advisor (fork de Supabase)
  11. pg_stat_monitor
  12. hashids (pg_hashids)
  13. pg_stat_statements (de postgresql-contrib-16)
  14. TimescaleDB (timescaledb-2-postgresql-16)

Uso

Para usar esta imagen:

  1. Construcción de la imagen:

    docker build . --no-cache --rm -t pg16-bnex:0.YY.MM.DD-HHMM 

    Construir y subir a Google Cloud

    docker buildx build --platform linux/amd64,linux/arm64 . --no-cache --rm -t southamerica-west1-docker.pkg.dev/gestiondocumental/sistemas/pg16-bnex:25.03.10 --push
  2. Ejecución del contenedor:

    docker run -d \
      --name mi-postgres \
      -e POSTGRES_PASSWORD=micontraseña \
      -e POSTGRES_USER=miusuario \
      -e POSTGRES_DB=mibasededatos \
      -p 5432:5432 \
      postgres-personalizado
  3. Conexión a la base de datos:

    psql -h localhost -U miusuario -d mibasededatos

Notas importantes

  • La imagen expone PostgreSQL en el puerto 5432.
  • Incluye configuraciones personalizadas en /etc/postgresql/.
  • El script init-db.sh se ejecuta automáticamente al iniciar el contenedor por primera vez.
  • La imagen está optimizada para casos de uso que requieren análisis espacial, vectorial, series temporales y seguridad avanzada.
  • Las precargas de bibliotecas incluyen: pg_stat_statements, pg_stat_monitor, pg_cron, pgaudit, timescaledb y wal2json.

Consideraciones técnicas

1. Arquitectura de la Imagen

La arquitectura de esta imagen de PostgreSQL ha sido diseñada con varios principios técnicos en mente:

Modularidad y extensibilidad

  • Separación clara de responsabilidades: El Dockerfile se encarga de la instalación, postgresql.conf de la configuración general, y init-db.sh de la inicialización de la base de datos.
  • Configuración por capas: Permite modificar un aspecto sin afectar a los demás.

Optimización para casos de uso específicos

  • Análisis vectorial: pgvector está configurado con parámetros de memoria elevados para manejar eficientemente operaciones vectoriales.
  • Series temporales: TimescaleDB está integrado con workers dedicados para procesar consultas de series temporales en paralelo.
  • Datos geoespaciales: PostGIS está preconfigurado con parámetros optimizados para operaciones espaciales.

2. Justificaciones de Configuración

Parámetros de memoria

  • shared_buffers (1GB): Representa aproximadamente el 25% de la RAM disponible, un balance óptimo para la mayoría de cargas de trabajo.
  • work_mem (64MB): Permite operaciones complejas de ordenamiento y hash en memoria, evitando escrituras en disco.
  • maintenance_work_mem (256MB/1GB): El valor elevado mejora significativamente el rendimiento de operaciones de mantenimiento y creación de índices, especialmente para pgvector.

Configuración WAL (Write-Ahead Log)

  • wal_level = logical: Permite replicación lógica, ofreciendo flexibilidad para replicar selectivamente tablas o esquemas.
  • max_wal_size (2GB): Reduce la frecuencia de checkpoints, mejorando el rendimiento de escritura.
  • checkpoint_completion_target (0.9): Distribuye la escritura de checkpoint a lo largo del tiempo, evitando picos de I/O.

Paralelismo

  • max_worker_processes (16): Permite un mayor número de procesos en paralelo.
  • max_parallel_workers_per_gather (4): Optimiza consultas complejas utilizando múltiples CPU.

Autovacuum

  • autovacuum_vacuum_scale_factor (0.05): Más agresivo que el valor predeterminado (0.2), especialmente beneficioso para tablas grandes.
  • autovacuum_analyze_scale_factor (0.025): Mantiene estadísticas actualizadas sin esperar a que cambien grandes porcentajes de datos.

3. Beneficios de rendimiento

Esta configuración proporciona beneficios significativos de rendimiento en varios escenarios:

Consultas analíticas

  • Mejora del 30-50% en consultas complejas gracias a la paralelización y configuración de memoria.
  • Mejor utilización de índices con effective_io_concurrency y random_page_cost optimizados para SSD.

Operaciones vectoriales

  • Las consultas de similitud con pgvector pueden ejecutarse hasta 3 veces más rápido con la configuración de memoria dedicada.
  • Los índices IVFFLAT y HNSW se construyen más rápido con maintenance_work_mem elevado.

Cargas de trabajo mixtas

  • La configuración de autovacuum agresiva previene el deterioro del rendimiento a lo largo del tiempo.
  • La separación de tablespaces para índices mejora la localidad de referencia y reduce la contención de I/O.

Replicación y alta disponibilidad

  • Configuración para streaming replication con suficientes slots y walwriters.
  • Compatibilidad con logical replication para escenarios de migración y carga cero.

4. Consideraciones de seguridad

  • pgaudit: Configurado para registrar operaciones de escritura, DDL y funciones, cumpliendo requisitos de auditoría.
  • Monitoreo proactivo: Las tablas de monitoreo permiten detectar patrones anómalos y posibles problemas antes de que afecten a la producción.
  • Separación de roles: El rol de solo lectura permite implementar el principio de privilegio mínimo.

5. Limitaciones y requisitos

Para aprovechar al máximo esta configuración, se recomienda:

  • Mínimo 4GB de RAM dedicada al contenedor
  • Almacenamiento en SSD, preferiblemente NVMe
  • Al menos 2 CPU virtuales o físicas
  • Monitoreo de tendencias de crecimiento de datos para ajustar parámetros de autovacuum

En entornos con restricciones de recursos, considere ajustar:

  • Reducir shared_buffers a 512MB
  • Reducir work_mem a 32MB
  • Reducir max_parallel_workers según CPUs disponibles
  • Cambiar log_statement a 'ddl' para reducir la sobrecarga de logging

6. Estrategias de escalamiento

La imagen está preparada para diferentes estrategias de escalamiento:

  • Escalamiento vertical: Ajuste las variables de memoria y CPU en docker-compose
  • Escalamiento horizontal: Utilice replicación lógica para distribuir la carga entre varias instancias
  • Particionamiento: TimescaleDB facilita el particionamiento automático por tiempo
  • Sharding: Considere implementar particionamiento por hash para conjuntos de datos muy grandes

7. Prácticas recomendadas de operación

  • Backups regulares: Utilice el volumen /backups para almacenar copias de seguridad programadas
  • Monitoreo proactivo: Revise las métricas recopiladas en el esquema monitoring
  • Mantenimiento programado: Utilice pg_cron para programar tareas de mantenimiento en horarios de baja carga
  • Actualización de parámetros: Ajuste los parámetros de configuración según el crecimiento de sus datos

About

PostgreSQL 16.8 con múltiples extensiones y herramientas para análisis de datos

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages