Files

67 lines
1.9 KiB
Markdown

# 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"
```