67 lines
1.9 KiB
Markdown
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"
|
|
```
|