-- 泵站信息表公用化迁移的回滚脚本(KingbaseES / PostgreSQL 兼容) -- 对应正向迁移:migration_pump_station_shared.sql -- -- 回滚前置条件: -- 回滚后表恢复为“供水专用”,不能携带排水泵站数据。 -- 默认安全策略:若存在 station_type='drainage' 的记录则中止回滚, -- 由人工先导出/迁移这些数据;确认丢弃时再手动执行下方注释中的删除语句。 -- -- 警告:本脚本会删除 station_type 列并改回表名,请先完整备份后执行。 -- 0. 安全护栏:存在排水泵站记录时中止回滚 DO $$ DECLARE drainage_count integer; BEGIN SELECT COUNT(*) INTO drainage_count FROM app_user.pump_station WHERE station_type = 'drainage'; IF drainage_count > 0 THEN RAISE EXCEPTION '回滚中止:pump_station 中存在 % 条排水泵站(drainage)记录,请先导出或确认删除后再回滚', drainage_count; END IF; END $$; -- 如确认丢弃排水泵站数据,先手动执行(默认不执行): -- DELETE FROM app_user.pump_station WHERE station_type = 'drainage'; -- 1. 删除取值域约束与类型索引 ALTER TABLE app_user.pump_station DROP CONSTRAINT IF EXISTS ck_pump_station_type; DROP INDEX IF EXISTS app_user.idx_pump_station_type; -- 2. 删除类型字段(先移除默认值与非空,再删列) ALTER TABLE IF EXISTS app_user.pump_station ALTER COLUMN station_type DROP DEFAULT; ALTER TABLE IF EXISTS app_user.pump_station DROP COLUMN IF EXISTS station_type; -- 3. 坐标索引名改回 ALTER INDEX IF EXISTS app_user.idx_pump_station_lon_lat RENAME TO idx_water_pump_station_lon_lat; -- 4. 主键序列名改回(幂等) DO $$ BEGIN IF EXISTS (SELECT 1 FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = 'app_user' AND c.relname = 'pump_station_id_seq') THEN ALTER SEQUENCE app_user.pump_station_id_seq RENAME TO water_pump_station_id_seq; END IF; END $$; -- 5. 表名改回 ALTER TABLE IF EXISTS app_user.pump_station RENAME TO water_pump_station; COMMENT ON TABLE app_user.water_pump_station IS '供水泵站信息表'; -- 回滚后校验: -- SELECT to_regclass('app_user.water_pump_station') AS old_table_back, -- to_regclass('app_user.pump_station') AS new_table_gone; -- 代码层需同步 git 回退到本次迁移前的版本(实体 @TableName、Mapper XML、过滤逻辑等)。