# BirdAI database migrations

Schema changes applied to the BirdAI Postgres database, in chronological order.
Filenames are YYYYMMDD-NNN_short_description.sql where NNN is a sequence number
within the day for ordering when multiple migrations land same-day.

## Conventions

- Each file is idempotent: uses IF NOT EXISTS / IF EXISTS so it can be
  re-run safely against a database that already has the change applied. This
  matters because we don't track which migrations a given DB has applied (no
  migrations table yet — that's its own future migration).
- Each file is a single logical change: one feature, one rollout. Don't pile
  unrelated DDL into one file.
- Each file documents what it's for and which worker version requires it
  in a header comment, so the relationship between schema and code is legible
  from either side.
- Migrations are forward-only. No down-migrations. If a change is wrong,
  write a new migration that fixes it.

## Applying

Against the live DB:

    psql "$PG_DSN" -f migrations/YYYYMMDD-NNN_name.sql

Against a fresh DB (disaster recovery, dev clone), apply all files in order:

    for f in migrations/*.sql; do
        echo "Applying $f"
        psql "$PG_DSN" -f "$f"
    done

## Pending: migrations tracking table

There is no schema_migrations table yet. Adding one is itself a migration —
deferred until a second migration after this one lands and the need is real.
