DEPLOY.LEGACY.INVALID_INDEX_NAME_COLLISION — an invalid index is standing where this deploy wants to build one
- Category: safety
- Severity: high
- Level: 0
- Downtime class: online
- Stability: stable
- Suites: deploy
- Applies to: PostgreSQL
Debt, or a deploy that ends halfway
DEPLOY.LEGACY.INVALID_INDEX reports an index left invalid by a build that did not finish. That is debt: real, worth clearing, survivable for another week.
This is the same wreckage with one difference that changes everything — the pending migration
re-uses its name. CREATE INDEX will fail on a name conflict, the deploy ends partway through, and
the error nobody reads as a name conflict is the one you get.
That is not a matter of degree, which is why it is its own id rather than a louder severity.
What to do about it
-- The leftover is not usable: the planner ignores it while it still costs write amplification.
DROP INDEX CONCURRENTLY idx_orders_status;
Then re-run the deploy. CONCURRENTLY keeps the drop off the table's write path.
The cases this cannot see
- It matches on the index name the pending migration uses. A build that reaches the same object under a different name collides at run time and is not anticipated here.
- It cannot tell an index that is mid-build from one whose build failed — both read
indisvalid = falsewhile they exist, and only the second is wreckage.