升级到 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 引入的重要问题。仔细执行清理流程,可避免遗留数据库不一致并完成升级。需要其他支持或遇到本指南未覆盖的问题,请联系技术支持。


请始终先在预发布环境测试此流程,再应用于生产系统。

输入功能、设置、端点或 SDK 方法。