{"record":{"id":"9762cbc6cad7c875","repo":"immich-app/immich","slug":"the-name-extension-version-is-version","errorCode":null,"errorMessage":"\n    The ${name} extension version is ${version}, which means it is a nightly release.\n\n    Please run 'DROP EXTENSION IF EXISTS ${extension}' and switch to a release version.\n    See https://docs.immich.app/guides/database-queries for how to query the database.","messagePattern":"\n    The (.+?) extension version is (.+?), which means it is a nightly release\\.\n\n    Please run 'DROP EXTENSION IF EXISTS (.+?)' and switch to a release version\\.\n    See https://docs\\.immich\\.app/guides/database-queries for how to query the database\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"server/src/services/database.service.ts","lineNumber":79,"sourceCode":"    if (!current || !satisfies(current, postgresRange)) {\n      throw new Error(\n        `Invalid PostgreSQL version. Found ${version}, but needed ${postgresRange}. Please use a supported version.`,\n      );\n    }\n\n    await this.databaseRepository.withLock(DatabaseLock.Migrations, async () => {\n      const extension = await this.databaseRepository.getVectorExtension();\n      const name = EXTENSION_NAMES[extension];\n      const extensionRange = this.databaseRepository.getExtensionVersionRange(extension);\n\n      const extensionVersions = await this.databaseRepository.getExtensionVersions(VECTOR_EXTENSIONS);\n      const { installedVersion, availableVersion } = extensionVersions.find((v) => v.name === extension) ?? {};\n      if (!availableVersion) {\n        throw new Error(messages.notInstalled(name));\n      }\n\n      if ([availableVersion, installedVersion].some((version) => version && eq(version, '0.0.0'))) {\n        throw new Error(messages.nightlyVersion({ name, extension, version: '0.0.0' }));\n      }\n\n      if (!satisfies(availableVersion, extensionRange)) {\n        throw new Error(messages.outOfRange({ name, extension, version: availableVersion, range: extensionRange }));\n      }\n\n      if (!installedVersion) {\n        await this.createExtension(extension);\n      }\n\n      if (installedVersion && gt(availableVersion, installedVersion)) {\n        await this.updateExtension(extension, availableVersion);\n      } else if (installedVersion && !satisfies(installedVersion, extensionRange)) {\n        throw new Error(messages.outOfRange({ name, extension, version: installedVersion, range: extensionRange }));\n      } else if (installedVersion && lt(availableVersion, installedVersion)) {\n        throw new Error(messages.invalidDowngrade({ name, extension, availableVersion, installedVersion }));\n      }\n","sourceCodeStart":61,"sourceCodeEnd":97,"githubUrl":"https://github.com/immich-app/immich/blob/e55ac299a4ec7cb372e35dbf2c6c05ee9ce77f6c/server/src/services/database.service.ts#L61-L97","documentation":"If either the available or installed version of the vector extension resolves to 0.0.0, Immich treats it as a nightly build, which has incompatible/unknown behavior. Startup aborts with instructions to drop the extension and switch to a release version.","triggerScenarios":"pgvector or VectorChord installed from a git nightly/master build that reports version 0.0.0; upgrading the extension from source without checking out a release tag.","commonSituations":"Building pgvector from the main branch; distro packages compiled from snapshot; leftover nightly extension after switching images.","solutions":["Connect to the database and run: DROP EXTENSION IF EXISTS vectorchord (or the affected extension name), then install a stable release of the extension and restart Immich so it is recreated.","Reinstall the extension from an official release tag (e.g. pgvector v0.8.0, VectorChord release) instead of nightly/master.","Re-create the DB container from the official Immich Postgres image which ships release versions."],"exampleFix":"-- psql\nDROP EXTENSION IF EXISTS vectorchord CASCADE;\n-- then restart Immich with a release-version extension installed","handlingStrategy":"validation","validationCode":"const { rows } = await db.query(\"SELECT extversion FROM pg_extension WHERE extname IN ('vectorchord','vectors','pgvector')\");\nif (rows.some((r) => r.extversion === '0.0.0')) console.error('Nightly extension build detected; reinstall a release');","typeGuard":null,"tryCatchPattern":"try {\n  await server.start();\n} catch (e) {\n  if (/nightly release/.test(e.message)) {\n    console.error('Drop the extension and reinstall from a stable release tag.');\n  } else throw e;\n}","preventionTips":["Build extensions only from release tags, never master/nightly.","Check extversion after upgrading the extension.","Prefer the bundled extension in official Immich Postgres images."],"tags":["postgres","extension","nightly","version","bootstrap"],"backgroundTag":"value-out-of-range","analyzedSha":"e55ac299a4ec7cb372e35dbf2c6c05ee9ce77f6c","analyzedAt":"2026-09-15T07:20:19.675Z","contentChangedAt":"2026-09-15T07:20:19.675Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}