| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- -- 泵站信息表公用化迁移的回滚脚本(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、过滤逻辑等)。
|