Files
IPSExtractor/services/db
..

db (migraciones)

Contenedor de un solo uso que aplica las migraciones de base de datos con Alembic. Se ejecuta al arrancar el stack y termina con código 0 al completar. El orquestador Docker reinicia en caso de error.


Comportamiento

  1. Conecta a PostgreSQL.
  2. Adquiere un advisory lock para evitar ejecuciones concurrentes.
  3. Aplica todas las migraciones pendientes.
  4. Termina.

Los demás servicios tienen depends_on: db-migrations: condition: service_completed_successfully, por lo que no arrancan hasta que las migraciones terminen.


Variables de entorno

Variable Descripción
DATABASE_URL PostgreSQL (postgresql+psycopg://...)

Esquema de base de datos

jobs              — contenedor de un trabajo del usuario (multimódulo)
tasks             — ejecución de un módulo dentro de un job
                    type: counting | extraction | cleaning
count_job_files   — resultado de conteo por PDF (job_module_id → tasks.id)
extraction_batches — lote de extracción (job_module_id → tasks.id)
extraction_rows   — fila extraída (batch_id → extraction_batches.id)
cleaning_jobs     — job de limpieza (task_id → tasks.id)
cleaned_rows      — fila limpiada (cleaning_job_id → cleaning_jobs.id)

Documentación completa en docs/database.dbml.


Estructura del código

Dockerfile          — imagen Python slim + alembic + psycopg
alembic.ini         — configuración de Alembic
alembic/
  env.py            — entorno de migraciones con advisory lock
  versions/
    0001_initial_schema.py
    0002_add_jobs_and_count.py
run_migrations.py   — script principal con manejo de errores
requirements.txt

Añadir una migración

# Generar una nueva revisión
docker run --rm -e DATABASE_URL=... ipsextractor-db-migrations \
  alembic revision --autogenerate -m "descripcion"