-- ============================================================================== -- RailwaySystem 数据库 V2 迁移安全门禁 A: 000_tx_capability_probe.sql -- 适用数据库: KingbaseES V009R003C018 (schema: public, database_mode: mysql) -- 执行目标: 在正式执行迁移前,实证探测当前数据库实例是否支持 DDL 事务回滚能力 -- 约束原则: -- 1. 本文件为【前置能力探针】,绝不读取或修改任何 train_* 业务表与 sys_* 系统表 -- 2. 仅在临时对象 public.__railway_v2_tx_probe 上执行可逆测试 -- 3. 若 ROLLBACK 后探针表仍旧残留,表明 DDL 隐式自动提交,立即强行熔断后续迁移 -- ============================================================================== -- Phase A: 启动显式事务,创建并修改探针临时表,随后主动 ROLLBACK BEGIN; CREATE TABLE public.__railway_v2_tx_probe ( id INTEGER ); ALTER TABLE public.__railway_v2_tx_probe ADD COLUMN test_col INTEGER; ROLLBACK; -- Phase B: 只读断言验证探针表是否被完整撤销 DO $$ DECLARE v_probe_exists INT; BEGIN SELECT count(*) INTO v_probe_exists FROM information_schema.tables WHERE table_schema = 'public' AND table_name = '__railway_v2_tx_probe'; IF v_probe_exists > 0 THEN -- 发现探针表未被回滚,说明数据库引擎在执行 DDL 时发生了隐式提交 RAISE EXCEPTION '>>> [Probe-FATAL] 当前 Kingbase 实例 DDL 不满足 V2 迁移事务假设 (DDL 在 ROLLBACK 后依然残留),禁止继续执行 001~010 迁移!'; ELSE RAISE NOTICE '>>> [Probe-PASS] 数据库 DDL 事务原子性验证通过:Kingbase 实例支持 DDL 事务回滚,符合 V2 迁移安全前提。'; END IF; END $$;