ai-chatbot/lib/db/migrations/0018_add_volcano_video_support.sql
Your Name 53ddb7e585
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
Initial commit - clean repository
2025-12-17 20:15:18 +08:00

95 lines
3.5 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ==========================================
-- 火山引擎视频服务 - 数据库迁移
-- 版本: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;
-- ==========================================
-- 迁移完成
-- ==========================================