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