# X_MIGRATE_CONCURRENT

## Means

another migrator holds the migration lock

## Typical cause

two overlapping deploys, or a migrator wedged on a partition — or OOM-killed with its backend still alive — still holding `pg_advisory_lock(<key>)` when the wait ran out. `pg_advisory_lock` blocks with no timeout, so that case left `helm upgrade --wait` sitting inside one statement, printing nothing, with the job never failing so `backoffLimit` never fired. `As of 2026-08` a bounded `pg_try_advisory_lock` poll turns it into an exit code

## Fix

`psql "$DATABASE_URL" -c "select pid, application_name, state from pg_stat_activity join pg_locks using (pid) where locktype = 'advisory'"` — `pg_terminate_backend(pid)` the wedged migrator, then `x db migrate`

[Entity and database](/error-codes#entity-and-database)
