Files
railwaysystem/RuoYi-Vue/sql/train/v2/000_tx_capability_probe.sql
T

39 lines
1.7 KiB
PL/PgSQL

-- ==============================================================================
-- 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 $$;