imetting_backend/sql/migrate_prompts_table.sql

68 lines
2.2 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

-- 提示词表改造迁移脚本
-- 将 prompt_config 表的功能整合到 prompts 表
-- 步骤1: 添加新字段
ALTER TABLE prompts
ADD COLUMN task_type ENUM('MEETING_TASK', 'KNOWLEDGE_TASK')
COMMENT '任务类型MEETING_TASK-会议任务, KNOWLEDGE_TASK-知识库任务' AFTER name;
ALTER TABLE prompts
ADD COLUMN is_default BOOLEAN NOT NULL DEFAULT FALSE
COMMENT '是否为该任务类型的默认模板' AFTER content;
-- 步骤2: 修改 is_active 字段(如果存在且类型不是 BOOLEAN
-- 先检查字段是否存在,如果不存在则添加
ALTER TABLE prompts
MODIFY COLUMN is_active BOOLEAN NOT NULL DEFAULT TRUE
COMMENT '是否启用(只有启用的提示词才能被使用)';
-- 步骤3: 删除 tags 字段
ALTER TABLE prompts DROP COLUMN IF EXISTS tags;
-- 步骤4: 从 prompt_config 迁移数据(如果 prompt_config 表存在)
-- 更新 task_type 和 is_default
UPDATE prompts p
LEFT JOIN prompt_config pc ON p.id = pc.prompt_id
SET
p.task_type = CASE
WHEN pc.task_name IS NOT NULL THEN pc.task_name
ELSE 'MEETING_TASK' -- 默认值
END,
p.is_default = CASE
WHEN pc.is_default = 1 THEN TRUE
ELSE FALSE
END
WHERE pc.prompt_id IS NOT NULL OR p.task_type IS NULL;
-- 步骤5: 为所有没有设置 task_type 的提示词设置默认值
UPDATE prompts
SET task_type = 'MEETING_TASK'
WHERE task_type IS NULL;
-- 步骤6: 将 task_type 设置为 NOT NULL
ALTER TABLE prompts
MODIFY COLUMN task_type ENUM('MEETING_TASK', 'KNOWLEDGE_TASK') NOT NULL
COMMENT '任务类型MEETING_TASK-会议任务, KNOWLEDGE_TASK-知识库任务';
-- 步骤7: 确保每个 task_type 只有一个默认提示词
-- 如果有多个默认,只保留 id 最小的那个
UPDATE prompts p1
LEFT JOIN (
SELECT task_type, MIN(id) as min_id
FROM prompts
WHERE is_default = TRUE
GROUP BY task_type
) p2 ON p1.task_type = p2.task_type
SET p1.is_default = FALSE
WHERE p1.is_default = TRUE AND p1.id != p2.min_id;
-- 步骤8: (可选) 备注 prompt_config 表已废弃
-- 如果需要删除 prompt_config 表,取消下面的注释
-- DROP TABLE IF EXISTS prompt_config;
-- 迁移完成
SELECT '提示词表迁移完成!' as message;
SELECT task_type, COUNT(*) as total, SUM(is_default) as default_count
FROM prompts
GROUP BY task_type;