fix(server): drop old extension (#18400)

This commit is contained in:
Mert
2025-05-21 09:53:40 -04:00
committed by GitHub
parent 98e998e814
commit a02fe89ec9
7 changed files with 211 additions and 80 deletions

View File

@@ -77,14 +77,14 @@ export class DatabaseRepository {
return getVectorExtension(this.db);
}
@GenerateSql({ params: [DatabaseExtension.VECTORS] })
async getExtensionVersion(extension: DatabaseExtension): Promise<ExtensionVersion> {
@GenerateSql({ params: [[DatabaseExtension.VECTORS]] })
async getExtensionVersions(extensions: readonly DatabaseExtension[]): Promise<ExtensionVersion[]> {
const { rows } = await sql<ExtensionVersion>`
SELECT default_version as "availableVersion", installed_version as "installedVersion"
SELECT name, default_version as "availableVersion", installed_version as "installedVersion"
FROM pg_available_extensions
WHERE name = ${extension}
WHERE name in (${sql.join(extensions)})
`.execute(this.db);
return rows[0] ?? { availableVersion: null, installedVersion: null };
return rows;
}
getExtensionVersionRange(extension: VectorExtension): string {
@@ -115,6 +115,7 @@ export class DatabaseRepository {
}
async createExtension(extension: DatabaseExtension): Promise<void> {
this.logger.log(`Creating ${EXTENSION_NAMES[extension]} extension`);
await sql`CREATE EXTENSION IF NOT EXISTS ${sql.raw(extension)} CASCADE`.execute(this.db);
if (extension === DatabaseExtension.VECTORCHORD) {
const dbName = sql.table(await this.getDatabaseName());
@@ -125,8 +126,13 @@ export class DatabaseRepository {
}
}
async dropExtension(extension: DatabaseExtension): Promise<void> {
this.logger.log(`Dropping ${EXTENSION_NAMES[extension]} extension`);
await sql`DROP EXTENSION IF EXISTS ${sql.raw(extension)}`.execute(this.db);
}
async updateVectorExtension(extension: VectorExtension, targetVersion?: string): Promise<VectorUpdateResult> {
const { availableVersion, installedVersion } = await this.getExtensionVersion(extension);
const [{ availableVersion, installedVersion }] = await this.getExtensionVersions([extension]);
if (!installedVersion) {
throw new Error(`${EXTENSION_NAMES[extension]} extension is not installed`);
}