升级到 1.42.1 的迁移指南
升级到 1.42.1 时修复迁移问题
简介
1.42.0 引入的数据库结构变更导致部分用户遇到迁移问题。1.42.1 热修复版本安装前需要执行特定清理流程。本指南介绍所需步骤,帮助完成该历史版本升级。
问题背景
1.42.0 通过 seatmap-editor 的 Flyway 迁移修改租户管理模型,但实现问题造成迁移后的数据不一致和应用错误,包括:
- organization 表增加了未使用的 tenant_id 列。
- 创建了与现有权限结构冲突的冗余角色。
- 新租户相关表未完整接入现有模型。
- 版本 75 的迁移脚本使数据库处于不一致状态。
安装前清理脚本
升级 1.42.1 前,必须运行以下 SQL,移除 1.42.0 引入的问题变更:
ALTER TABLE organization DROP COLUMN tenant_id;
DELETE FROM users_roles WHERE role_id = 4;
DELETE FROM role WHERE id = 4;
DROP SEQUENCE tenant_id_seq;
DROP TABLE tenants_admins;
DROP TABLE tenant;
DELETE FROM flyway_schema_history WHERE version = '75';
脚本会移除 organization 的 tenant_id 列、相关角色分配及角色定义、tenant_id_seq 序列、不完整的租户相关表,并删除 Flyway 历史中的问题迁移条目,以允许正确重新迁移。
分步升级流程
1. 备份数据库
执行任何迁移修复前,完整备份 PostgreSQL 15+ 数据库:
pg_dump -U your_username -d your_database_name > pre_migration_fix_backup.sql
2. 执行清理脚本
使用数据库客户端连接 PostgreSQL 15+,执行上述清理脚本,确保具有修改结构和删除数据的权限。
# Example using psql command line client
psql -U your_username -d your_database_name -f cleanup_script.sql
也可通过 pgAdmin、DBeaver、DataGrip 等 PostgreSQL 客户端执行。
3. 验证清理完成
检查:
- organization 中已无 tenant_id 列。
- users_roles 中无 role_id = 4 记录。
- role 中无 id = 4 记录。
- tenant_id_seq 序列、tenants_admins 表和 tenant 表均不存在。
- flyway_schema_history 中无版本 75 条目。
4. 安装 1.42.1
清理后部署更新的 seatmap-editor 服务,由其管理 Flyway 迁移:
# Example deployment commands - adjust according to your deployment process
# For Docker-based deployments
docker pull your-registry/seatmap-editor:1.42.1
docker stop seatmap-editor
docker run -d --name seatmap-editor your-registry/seatmap-editor:1.42.1
# Or if using Kubernetes
kubectl set image deployment/seatmap-editor seatmap-editor=your-registry/seatmap-editor:1.42.1
服务启动时自动运行修正后的迁移。
5. 验证应用功能
使用管理员登录,检查组织管理、用户角色分配和关键业务流程。
故障排查
以下适用于 PostgreSQL 15+ 和 Flyway。
错误:Column tenant_id does not exist
可能已移除该列,可继续执行清理脚本其余部分。
错误:Relation tenant_id_seq does not exist
序列可能名称不同或已删除,可继续其余步骤。
错误:Role with ID 4 not found
相关角色可能已删除,可继续其余步骤。
升级后应用报错
检查 seatmap-editor 日志中的具体错误。常见原因:
- 缺少需要重建的数据库索引。
- 缓存数据需要清除。
- 应用服务需要重启。
- Flyway 校验和不匹配;若 DBA 已创建对应过程,可使用
CALL flyway_schema_history_fix();。 - seatmap-editor 数据库用户权限问题。
结语
1.42.1 修复了 1.42.0 引入的重要问题。仔细执行清理流程,可避免遗留数据库不一致并完成升级。需要其他支持或遇到本指南未覆盖的问题,请联系技术支持。
请始终先在预发布环境测试此流程,再应用于生产系统。