68 lines
2.2 KiB
SQL
68 lines
2.2 KiB
SQL
-- 提示词表改造迁移脚本
|
||
-- 将 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;
|