# 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`](../../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 ```bash # Generar una nueva revisión docker run --rm -e DATABASE_URL=... ipsextractor-db-migrations \ alembic revision --autogenerate -m "descripcion" ```