39 lines
1.7 KiB
PL/PgSQL
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 $$;
|