rag/init/migrate_rag_prefix.sql
ymq 789960a1cf refactor(schema): rag 模块全部数据表加 rag_ 前缀(模块跨应用复用防冲突)
- models/ 重建为正确表定义格式(summary+fields+indexes),覆盖全部 11 个表
  修正原 models/ 误放 CRUD 格式副本(缺 summary)导致 json2ddl 100% 失败被静默忽略
- json/ 6 个 CRUD 定义 tblname 加前缀 + 文件改名
- 129 处 SQL/sor 表名加 rag_ 前缀(URL 路径 knowledge_bases_list 保持不变)
- 新增 init/migrate_rag_prefix.sql 幂等 RENAME TABLE 迁移
2026-08-25 14:24:37 +08:00

55 lines
2.1 KiB
SQL

-- rag 模块表名加 rag_ 前缀(模块跨应用复用,避免与业务表冲突)
-- 幂等:仅当旧表存在且新表不存在时才 RENAME。
-- 用法: mysql -h <host> -u<user> -p<pwd> <db> < migrate_rag_prefix.sql
DELIMITER $$
DROP PROCEDURE IF EXISTS rag_rename_tables$$
CREATE PROCEDURE rag_rename_tables()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE oldname VARCHAR(64);
DECLARE cur CURSOR FOR
SELECT t FROM (
SELECT 'knowledge_bases' AS t UNION ALL
SELECT 'documents' UNION ALL
SELECT 'document_chunks' UNION ALL
SELECT 'tags' UNION ALL
SELECT 'media_tags' UNION ALL
SELECT 'entities' UNION ALL
SELECT 'entity_relations' UNION ALL
SELECT 'engine_configs' UNION ALL
SELECT 'subscriptions' UNION ALL
SELECT 'org_storage_limits' UNION ALL
SELECT 'usage_logs'
) x;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur;
read_loop: LOOP
FETCH cur INTO oldname;
IF done THEN LEAVE read_loop; END IF;
SET @has_old = (SELECT COUNT(*) FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = oldname);
SET @has_new = (SELECT COUNT(*) FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = CONCAT('rag_', oldname));
IF @has_old = 1 AND @has_new = 0 THEN
SET @sql = CONCAT('RENAME TABLE `', oldname, '` TO `rag_', oldname, '`');
PREPARE st FROM @sql;
EXECUTE st;
DEALLOCATE PREPARE st;
SELECT CONCAT('RENAMED: ', oldname, ' -> rag_', oldname) AS result;
ELSEIF @has_new = 1 THEN
SELECT CONCAT('SKIP (already migrated): rag_', oldname) AS result;
ELSE
SELECT CONCAT('SKIP (no such table): ', oldname) AS result;
END IF;
END LOOP;
CLOSE cur;
END$$
DELIMITER ;
CALL rag_rename_tables();
DROP PROCEDURE rag_rename_tables;