|
@@ -1,17 +1,17 @@
|
|
import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
|
|
|
|
-export class UsePgVectors1699746198141 implements MigrationInterface {
|
|
|
|
- name = 'UsePgVectors1699746198141';
|
|
|
|
|
|
+export class UsePgVectors1700713871511 implements MigrationInterface {
|
|
|
|
+ name = 'UsePgVectors1700713871511';
|
|
|
|
|
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
const faceDimQuery = await queryRunner.query(`
|
|
const faceDimQuery = await queryRunner.query(`
|
|
- SELECT CARDINALITY(embedding::real[]) as dimsize
|
|
|
|
- FROM asset_faces
|
|
|
|
- LIMIT 1`);
|
|
|
|
|
|
+ SELECT CARDINALITY(embedding::real[]) as dimsize
|
|
|
|
+ FROM asset_faces
|
|
|
|
+ LIMIT 1`);
|
|
const clipDimQuery = await queryRunner.query(`
|
|
const clipDimQuery = await queryRunner.query(`
|
|
- SELECT CARDINALITY("clipEmbedding"::real[]) as dimsize
|
|
|
|
- FROM smart_info
|
|
|
|
- LIMIT 1`);
|
|
|
|
|
|
+ SELECT CARDINALITY("clipEmbedding"::real[]) as dimsize
|
|
|
|
+ FROM smart_info
|
|
|
|
+ LIMIT 1`);
|
|
|
|
|
|
const faceDimSize = faceDimQuery?.[0]?.['dimsize'] ?? 512;
|
|
const faceDimSize = faceDimQuery?.[0]?.['dimsize'] ?? 512;
|
|
const clipDimSize = clipDimQuery?.[0]?.['dimsize'] ?? 512;
|
|
const clipDimSize = clipDimQuery?.[0]?.['dimsize'] ?? 512;
|
|
@@ -20,17 +20,17 @@ export class UsePgVectors1699746198141 implements MigrationInterface {
|
|
await queryRunner.query('CREATE EXTENSION vectors');
|
|
await queryRunner.query('CREATE EXTENSION vectors');
|
|
|
|
|
|
await queryRunner.query(`
|
|
await queryRunner.query(`
|
|
- ALTER TABLE asset_faces
|
|
|
|
|
|
+ ALTER TABLE asset_faces
|
|
ALTER COLUMN embedding SET NOT NULL,
|
|
ALTER COLUMN embedding SET NOT NULL,
|
|
ALTER COLUMN embedding TYPE vector(${faceDimSize})`);
|
|
ALTER COLUMN embedding TYPE vector(${faceDimSize})`);
|
|
|
|
|
|
await queryRunner.query(`
|
|
await queryRunner.query(`
|
|
- CREATE TABLE smart_search (
|
|
|
|
|
|
+ CREATE TABLE smart_search (
|
|
"assetId" uuid PRIMARY KEY NOT NULL REFERENCES assets(id) ON DELETE CASCADE,
|
|
"assetId" uuid PRIMARY KEY NOT NULL REFERENCES assets(id) ON DELETE CASCADE,
|
|
embedding vector(${clipDimSize}) NOT NULL )`);
|
|
embedding vector(${clipDimSize}) NOT NULL )`);
|
|
|
|
|
|
await queryRunner.query(`
|
|
await queryRunner.query(`
|
|
- INSERT INTO smart_search("assetId", embedding)
|
|
|
|
|
|
+ INSERT INTO smart_search("assetId", embedding)
|
|
SELECT si."assetId", si."clipEmbedding"
|
|
SELECT si."assetId", si."clipEmbedding"
|
|
FROM smart_info si
|
|
FROM smart_info si
|
|
WHERE "clipEmbedding" IS NOT NULL`);
|
|
WHERE "clipEmbedding" IS NOT NULL`);
|
|
@@ -40,11 +40,11 @@ export class UsePgVectors1699746198141 implements MigrationInterface {
|
|
await queryRunner.query(`ALTER TABLE asset_faces ALTER COLUMN embedding TYPE real array`);
|
|
await queryRunner.query(`ALTER TABLE asset_faces ALTER COLUMN embedding TYPE real array`);
|
|
await queryRunner.query(`ALTER TABLE smart_info ADD COLUMN IF NOT EXISTS "clipEmbedding" TYPE real array`);
|
|
await queryRunner.query(`ALTER TABLE smart_info ADD COLUMN IF NOT EXISTS "clipEmbedding" TYPE real array`);
|
|
await queryRunner.query(`
|
|
await queryRunner.query(`
|
|
- INSERT INTO smart_info
|
|
|
|
- ("assetId", "clipEmbedding")
|
|
|
|
- SELECT s."assetId", s.embedding
|
|
|
|
- FROM smart_search s
|
|
|
|
- ON CONFLICT (s."assetId") DO UPDATE SET "clipEmbedding" = s.embedding`);
|
|
|
|
|
|
+ INSERT INTO smart_info
|
|
|
|
+ ("assetId", "clipEmbedding")
|
|
|
|
+ SELECT s."assetId", s.embedding
|
|
|
|
+ FROM smart_search s
|
|
|
|
+ ON CONFLICT (s."assetId") DO UPDATE SET "clipEmbedding" = s.embedding`);
|
|
await queryRunner.query(`DROP TABLE IF EXISTS smart_search`);
|
|
await queryRunner.query(`DROP TABLE IF EXISTS smart_search`);
|
|
await queryRunner.query('DROP EXTENSION IF EXISTS vectors');
|
|
await queryRunner.query('DROP EXTENSION IF EXISTS vectors');
|
|
}
|
|
}
|