{"record":{"id":"bdab61ef22936f59","repo":"invoke-ai/InvokeAI","slug":"database-contains-unknown-applied-migration-ids","errorCode":null,"errorMessage":"Database contains unknown applied migration IDs: {unknown_ids}","messagePattern":"Database contains unknown applied migration IDs: (.+?)","errorType":"exception","errorClass":"MigrationError","httpStatus":null,"severity":"critical","filePath":"invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py","lineNumber":237,"sourceCode":"            if migration_id in visiting:\n                raise MigrationError(\"Migration dependency graph contains a cycle\")\n            visiting.add(migration_id)\n            if migration.depends_on is not None:\n                visit(migrations_by_id[migration.depends_on])\n            visiting.remove(migration_id)\n            visited.add(migration_id)\n\n        for migration in self._migrations:\n            visit(migration)\n\n    def get_migration_plan(self, applied_migration_ids: set[str]) -> list[Migration]:\n        \"\"\"Gets a deterministic migration plan from the set of applied migration IDs.\"\"\"\n        self.validate_dependency_graph()\n        known_migration_ids = set(self.migrations_by_id)\n        unknown_applied_ids = applied_migration_ids - known_migration_ids\n        if unknown_applied_ids:\n            unknown_ids = \", \".join(sorted(unknown_applied_ids))\n            raise MigrationError(f\"Database contains unknown applied migration IDs: {unknown_ids}\")\n\n        plan: list[Migration] = []\n        planned_or_applied_ids = set(applied_migration_ids)\n        remaining = {\n            migration.id: migration for migration in self._migrations if migration.id not in applied_migration_ids\n        }\n\n        while remaining:\n            runnable = sorted(\n                (\n                    migration\n                    for migration in remaining.values()\n                    if migration.depends_on is None or migration.depends_on in planned_or_applied_ids\n                ),\n                key=lambda migration: migration.sort_key,\n            )\n            if not runnable:\n                raise MigrationError(\"Migration dependency graph cannot be resolved\")","sourceCodeStart":219,"sourceCodeEnd":255,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py#L219-L255","documentation":"get_migration_plan builds a deterministic migration plan from the set of applied migration IDs recorded in the database. If the DB records migration IDs that are not registered in the current MigrationSet (e.g. after a downgrade or use of a different build), the mismatch is unrecoverable and a MigrationError is raised listing the unknown IDs.","triggerScenarios":"Running migrations against a database whose applied_migrations table contains IDs absent from self.migrations_by_id — typically after downgrading InvokeAI or pointing the app at a DB from a newer/older version with different migrations.","commonSituations":"Downgrading InvokeAI then launching against the same DB; switching branches/builds with different migration registries; corrupted or hand-edited applied_migrations rows.","solutions":["Restore a database backup taken at the version you are running","Upgrade InvokeAI to a version that includes the unknown migration IDs","Start from a fresh database if the data is disposable","Manually inspect/remove the unknown rows in applied_migrations (last resort)"],"exampleFix":"# before: launch after downgrade\ninvokeai-web --root /data/invokeai\n# after: upgrade to the build that knows those migrations\npip install -U invokeai && invokeai-web --root /data/invokeai","handlingStrategy":"validation","validationCode":"# before launching, inspect applied migrations vs the build\nimport sqlite3\nconn = sqlite3.connect(db_path)\napplied = {r[0] for r in conn.execute(\"SELECT migration_id FROM applied_migrations\")}\n# known ids come from the build's migration set\nunknown = applied - known_migration_ids\nassert not unknown, f\"downgrade detected; unknown migrations: {unknown}\"","typeGuard":null,"tryCatchPattern":"try:\n    services.run_migrations()\nexcept MigrationError as e:\n    if \"unknown applied migration IDs\" in str(e):\n        logger.critical(\"DB from a newer InvokeAI version: %s\", e)\n        raise\n    raise","preventionTips":["Back up the DB before upgrading or downgrading InvokeAI","Never point an older build at a DB migrated by a newer build","Pin InvokeAI versions in deployment environments"],"tags":["database","migrations","version-mismatch"],"backgroundTag":"unknown-migration-version","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}