-- ========================================== -- 火山引擎视频服务 - 数据库迁移 -- 版本:0018 -- 日期:2025-12-09 -- ========================================== -- ========================================== -- 1. 更新 AI Provider 类型枚举 -- ========================================== -- 注意:PostgreSQL 不支持直接修改 ENUM,需要使用 ALTER TYPE 或删除约束后重建 -- 这里我们删除旧约束,添加新约束来支持 'volcano-video' DO $$ BEGIN -- 检查约束是否存在并删除 IF EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = 'AiProvider_type_check' ) THEN ALTER TABLE "AiProvider" DROP CONSTRAINT "AiProvider_type_check"; END IF; -- 添加新的约束,包含 'volcano-video' ALTER TABLE "AiProvider" ADD CONSTRAINT "AiProvider_type_check" CHECK (type IN ('alibaba', 'openai', 'custom', 'local', 'gemini', 'qianwen-video', 'volcano-vision', 'volcano-video')); END $$; -- ========================================== -- 2. 扩展 AiModel 表 - 添加模型能力配置字段 -- ========================================== -- 模型能力配置(JSON格式) ALTER TABLE "AiModel" ADD COLUMN IF NOT EXISTS "capabilities" JSONB; -- 默认参数配置(JSON格式) ALTER TABLE "AiModel" ADD COLUMN IF NOT EXISTS "defaultParams" JSONB; -- 添加注释 COMMENT ON COLUMN "AiModel"."capabilities" IS '模型能力配置:支持的生成模式、分辨率、宽高比等(视频模型专用)'; COMMENT ON COLUMN "AiModel"."defaultParams" IS '默认参数配置:分辨率、时长、水印等默认值'; -- ========================================== -- 3. 扩展 Message_v2 表 - 添加视频存储字段 -- ========================================== -- 视频存储状态 ALTER TABLE "Message_v2" ADD COLUMN IF NOT EXISTS "video_storage_status" VARCHAR(20) DEFAULT 'temporary'; -- 临时视频URL(火山引擎24小时有效) ALTER TABLE "Message_v2" ADD COLUMN IF NOT EXISTS "temporary_video_url" TEXT; -- 永久视频URL(S3存储) ALTER TABLE "Message_v2" ADD COLUMN IF NOT EXISTS "permanent_video_url" TEXT; -- 归档完成时间 ALTER TABLE "Message_v2" ADD COLUMN IF NOT EXISTS "archived_at" TIMESTAMP; -- 视频元数据(JSON格式) ALTER TABLE "Message_v2" ADD COLUMN IF NOT EXISTS "video_metadata" JSONB; -- 添加注释 COMMENT ON COLUMN "Message_v2"."video_storage_status" IS '视频存储状态:temporary(临时)/archiving(归档中)/archived(已归档)/failed(失败)'; COMMENT ON COLUMN "Message_v2"."temporary_video_url" IS '火山引擎返回的临时URL(24小时有效)'; COMMENT ON COLUMN "Message_v2"."permanent_video_url" IS 'S3存储的永久URL'; COMMENT ON COLUMN "Message_v2"."archived_at" IS '视频归档完成时间'; COMMENT ON COLUMN "Message_v2"."video_metadata" IS '视频元数据:{taskId, duration, resolution, ratio, fileSize, s3Key, inputImages}'; -- ========================================== -- 4. 创建索引(提高归档任务查询性能) -- ========================================== -- 用于查询待归档视频的复合索引 CREATE INDEX IF NOT EXISTS "idx_message_video_archive" ON "Message_v2"("video_storage_status", "created_at") WHERE "video_storage_status" = 'temporary' AND "permanent_video_url" IS NULL; -- 用于快速定位已归档视频 CREATE INDEX IF NOT EXISTS "idx_message_permanent_video" ON "Message_v2"("permanent_video_url") WHERE "permanent_video_url" IS NOT NULL; -- ========================================== -- 迁移完成 -- ==========================================