ERROR: relation "x" already exists
CREATE TABLE/INDEX/SEQUENCE used a name that already exists in that schema.
Seen on:
PostgreSQL
Meaning
Migrations run twice, migration history out of sync with the real schema, or index names colliding (index names are unique per schema, not per table).
Common causes
- Migration re-run or history table out of sync
- Same index name used on two tables
- Restoring into a non-empty database
⚡ Quick fix
- Use IF NOT EXISTS
- Give indexes table-specific names
- Sync migration state (e.g. mark as applied) carefully
Detailed fix by platform
PostgreSQL
CREATE INDEX IF NOT EXISTS orders_user_id_idx ON orders (user_id);
How to diagnose
- Object — Table, index or sequence?
- Migrations — History matches schema?
🧠 Still stuck? Analyze your error
Paste the full message, response headers or stack trace — we'll detect the platform and point to the most likely cause.
Was this page helpful?
Report a correction or suggest an improvement
Last updated 2 Oct 2026