feat(db): 新增Kingbase数据库V2迁移与回滚脚本
This commit is contained in:
1 parent
277c9e210e
commit
c791e23f3e
17 files changed
+3386
No files matched your search
@@ -0,0 +1,57 @@
|
||||
-- ==============================================================================
|
||||
-- RailwaySystem 数据库 V2 迁移脚本: 008_migrate_teacher.sql
|
||||
-- 适用数据库: KingbaseES V009R003C018 (schema: public)
|
||||
-- 执行目标: 迁移并保留 train_teacher 唯一样本数据,完成旧列向新列平滑过渡并安全清理
|
||||
-- 事务边界: 全程在显式事务 BEGIN ... COMMIT 中执行
|
||||
-- 设计依据: RailwaySystem 数据库 V2 字段设计与 Kingbase DDL 规范 V1.0 及 Round 1 审查要求
|
||||
-- 安全规范:
|
||||
-- 1. 严禁在脚本中出现真实教师姓名、电话、身份证、邮箱等明文数据!
|
||||
-- 2. 完全采用纯 DML 数据映射: t_department -> org_name, t_title -> job_title, create_user -> create_by
|
||||
-- 3. 执行后验证迁移完整性,再将 status 与 del_flag 设为 NOT NULL 并安全移除旧列
|
||||
-- ==============================================================================
|
||||
|
||||
BEGIN;
|
||||
|
||||
-- 步骤 1: 数据平滑映射 (仅更新新字段为空的行,保证幂等)
|
||||
UPDATE train_teacher
|
||||
SET
|
||||
org_name = COALESCE(org_name, t_department),
|
||||
job_title = COALESCE(job_title, t_title),
|
||||
create_by = COALESCE(create_by, create_user),
|
||||
status = COALESCE(status, 1),
|
||||
del_flag = COALESCE(del_flag, '0')
|
||||
WHERE t_department IS NOT NULL OR t_title IS NOT NULL OR create_user IS NOT NULL;
|
||||
|
||||
-- 步骤 2: 校验迁移正确性 (数据行数精确为1,且新字段全部填充完成)
|
||||
DO $$
|
||||
DECLARE
|
||||
v_total_cnt INT;
|
||||
v_unmigrated_cnt INT;
|
||||
BEGIN
|
||||
SELECT count(*) INTO v_total_cnt FROM train_teacher;
|
||||
SELECT count(*) INTO v_unmigrated_cnt
|
||||
FROM train_teacher
|
||||
WHERE org_name IS NULL OR status IS NULL OR del_flag IS NULL;
|
||||
|
||||
IF v_total_cnt <> 1 THEN
|
||||
RAISE EXCEPTION '>>> [008-FATAL] 教师数据校验异常: 期望精确 1 条数据,实际检测到 % 条', v_total_cnt;
|
||||
END IF;
|
||||
|
||||
IF v_unmigrated_cnt > 0 THEN
|
||||
RAISE EXCEPTION '>>> [008-FATAL] 教师数据迁移失败: 存在 % 条记录的新主档字段尚未正确填充', v_unmigrated_cnt;
|
||||
END IF;
|
||||
|
||||
RAISE NOTICE '>>> [008-PASS] 教师唯一数据迁移核验通过,准备固化 NOT NULL 约束与清理旧列。';
|
||||
END $$;
|
||||
|
||||
-- 步骤 3: 固化新列 NOT NULL 约束
|
||||
ALTER TABLE train_teacher ALTER COLUMN status SET NOT NULL;
|
||||
ALTER TABLE train_teacher ALTER COLUMN del_flag SET NOT NULL;
|
||||
|
||||
-- 步骤 4: 安全删除已成功迁移的旧列 (杜绝 CASCADE)
|
||||
ALTER TABLE train_teacher
|
||||
DROP COLUMN IF EXISTS t_department,
|
||||
DROP COLUMN IF EXISTS t_title,
|
||||
DROP COLUMN IF EXISTS create_user;
|
||||
|
||||
COMMIT;
|
||||
Reference in new issue
Block a user