rollback_pump_station_shared.sql 2.4 KB

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