浏览代码

avoid nested transaction in migration

mertalev 1 年之前
父节点
当前提交
a187436be7
共有 2 个文件被更改,包括 14 次插入29 次删除
  1. 12 28
      server/src/infra/migrations/vector/1699746198141-UsePgVectors.ts
  2. 2 1
      web/tsconfig.json

+ 12 - 28
server/src/infra/migrations/vector/1699746198141-UsePgVectors.ts

@@ -19,43 +19,27 @@ export class UsePgVectors1699746198141 implements MigrationInterface {
     await queryRunner.query('DROP EXTENSION IF EXISTS vectors');
     await queryRunner.query('CREATE EXTENSION vectors');
 
+    await queryRunner.query(`ALTER TABLE asset_faces ALTER COLUMN embedding TYPE vector(${faceDimSize})`);
     await queryRunner.query(`
-      BEGIN;
-
-      ALTER TABLE asset_faces ALTER COLUMN embedding TYPE vector(${faceDimSize});
-
       CREATE TABLE smart_search (
         "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(`
       INSERT INTO smart_search("assetId", embedding)
         SELECT si."assetId", si."clipEmbedding"
         FROM smart_info si
-        WHERE "clipEmbedding" IS NOT NULL;
-
-      ALTER TABLE smart_info DROP COLUMN "clipEmbedding";
-
-      COMMIT;
-    `);
+        WHERE "clipEmbedding" IS NOT NULL`);
   }
 
   public async down(queryRunner: QueryRunner): Promise<void> {
+    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(`
-      BEGIN;
-
-      ALTER TABLE asset_faces ALTER COLUMN embedding TYPE real array;
-
-      ALTER TABLE smart_info ADD COLUMN IF NOT EXISTS "clipEmbedding" TYPE real array;
-
-      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;
-      
-      DROP TABLE IF EXISTS smart_search;
-
-      COMMIT;
-    `);
+    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`);
   }
 }

+ 2 - 1
web/tsconfig.json

@@ -17,6 +17,7 @@
     "strict": true,
     "target": "es2020",
     "preserveValueImports": false,
+    "baseUrl": ".",
     "paths": {
       "$lib": [
         "./src/lib"
@@ -28,7 +29,7 @@
         "./src/api"
       ],
       "@test-data": [
-        "./src/test-data"
+        "./src/test-data/*"
       ]
     }
   }