{"record":{"id":"d4bcfa0d88e25cc7","repo":"immich-app/immich","slug":"no-available-version-for-extension-names-extensi","errorCode":null,"errorMessage":"No available version for ${EXTENSION_NAMES[extension]} extension","messagePattern":"No available version for (.+?) extension","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/src/repositories/database.repository.ts","lineNumber":135,"sourceCode":"      const dbName = sql.id(await this.getDatabaseName());\n      await sql`ALTER DATABASE ${dbName} SET vchordrq.probes = 1`.execute(this.db);\n      await sql`SET vchordrq.probes = 1`.execute(this.db);\n    }\n  }\n\n  async dropExtension(extension: DatabaseExtension): Promise<void> {\n    this.logger.log(`Dropping ${EXTENSION_NAMES[extension]} extension`);\n    await sql`DROP EXTENSION IF EXISTS ${sql.raw(extension)}`.execute(this.db);\n  }\n\n  async updateVectorExtension(extension: VectorExtension, targetVersion?: string): Promise<void> {\n    const [{ availableVersion, installedVersion }] = await this.getExtensionVersions([extension]);\n    if (!installedVersion) {\n      throw new Error(`${EXTENSION_NAMES[extension]} extension is not installed`);\n    }\n\n    if (!availableVersion) {\n      throw new Error(`No available version for ${EXTENSION_NAMES[extension]} extension`);\n    }\n    targetVersion ??= availableVersion;\n\n    if (!diff(installedVersion, targetVersion)) {\n      return;\n    }\n\n    await Promise.all([\n      this.db.schema.dropIndex(VectorIndex.Clip).ifExists().execute(),\n      this.db.schema.dropIndex(VectorIndex.Face).ifExists().execute(),\n    ]);\n\n    await sql`ALTER EXTENSION ${sql.raw(extension)} UPDATE TO ${sql.lit(targetVersion)}`.execute(this.db);\n    await Promise.all([this.reindexVectors(VectorIndex.Clip), this.reindexVectors(VectorIndex.Face)]);\n  }\n\n  async prewarm(index: VectorIndex): Promise<void> {\n    const vectorExtension = await getVectorExtension(this.db);","sourceCodeStart":117,"sourceCodeEnd":153,"githubUrl":"https://github.com/immich-app/immich/blob/e55ac299a4ec7cb372e35dbf2c6c05ee9ce77f6c/server/src/repositories/database.repository.ts#L117-L153","documentation":"During updateVectorExtension, after confirming the extension is installed, Immich checks that a target version is available on the server (from pg_available_extension_versions). If no available version can be resolved, it throws — the requested upgrade cannot proceed because the Postgres server does not expose any (or the target) version of the extension.","triggerScenarios":"Calling updateVectorExtension with a targetVersion that is not present in pg_available_extension_versions, or with no targetVersion when the server advertises no available versions for the installed extension.","commonSituations":"Requesting a specific extension version newer than what the Postgres image ships; extension binaries removed from the server so no versions are available; pinned/older container images where the available version list is restricted; typo in the requested version string.","solutions":["Omit targetVersion and let Immich pick the server's available version, or pass a version confirmed via SELECT version FROM pg_available_extension_versions WHERE name = 'vector';","Upgrade the Postgres container image to one that ships the desired extension version","Fix the targetVersion string (check exact formatting, e.g. '0.8.0' not 'v0.8.0')","If the extension files were removed, reinstall the extension package on the Postgres server"],"exampleFix":"// before\nawait repo.updateVectorExtension(DatabaseExtension.Vector, '0.99.0');\n// after\nawait repo.updateVectorExtension(DatabaseExtension.Vector); // uses latest available version","handlingStrategy":"fallback","validationCode":"const { rows } = await sql`SELECT version FROM pg_available_extension_versions WHERE name = 'vector'`;\nif (rows.length === 0) throw new Error('no available versions; upgrade the postgres image');","typeGuard":null,"tryCatchPattern":"try {\n  await repo.updateVectorExtension(extension, targetVersion);\n} catch (e) {\n  if ((e as Error).message.includes('No available version')) {\n    await repo.updateVectorExtension(extension); // retry letting immich pick the available version\n  } else throw e;\n}","preventionTips":["Query pg_available_extension_versions before pinning a version","Keep the Postgres image current so desired versions exist","Validate version strings against server-available versions before use"],"tags":["database","postgres","extension","versioning"],"backgroundTag":"invalid-config-value","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"}