fix(migration): dead_letter_events 表名修复(backport 自 io_erp m000197)

历史迁移 m20260428_000091 的 enum 名 DeadLetterEvent(单数)→ DeriveIden 派生建表 dead_letter_event(单数),但 erp-core entity table_name=dead_letter_events(复数),致 consume_with_retry 的 insert_dead_letter 查错表,dead-letter 兜底自基座以来从未生效。本迁移 rename 单数→复数,与 entity 对齐(幂等:复数已存在则 no-op)。

backport 自 io_erp m20260614_000197。
This commit is contained in:
iven
2026-06-15 13:20:42 +08:00
parent 3772afd987
commit 0f57d619f6
2 changed files with 61 additions and 0 deletions

View File

@@ -56,6 +56,7 @@ mod m20260513_000144_enforce_version_optimistic_lock;
mod m20260518_000149_fix_admin_permissions; mod m20260518_000149_fix_admin_permissions;
mod m20260529_000169_supplement_rls_for_new_tables; mod m20260529_000169_supplement_rls_for_new_tables;
mod m20260613_000170_drop_wechat_users; mod m20260613_000170_drop_wechat_users;
mod m20260615_000171_rename_dead_letter_event_table;
pub struct Migrator; pub struct Migrator;
@@ -117,6 +118,7 @@ impl MigratorTrait for Migrator {
Box::new(m20260518_000149_fix_admin_permissions::Migration), Box::new(m20260518_000149_fix_admin_permissions::Migration),
Box::new(m20260529_000169_supplement_rls_for_new_tables::Migration), Box::new(m20260529_000169_supplement_rls_for_new_tables::Migration),
Box::new(m20260613_000170_drop_wechat_users::Migration), Box::new(m20260613_000170_drop_wechat_users::Migration),
Box::new(m20260615_000171_rename_dead_letter_event_table::Migration),
] ]
} }
} }

View File

@@ -0,0 +1,59 @@
use sea_orm_migration::prelude::*;
/// 修复 dead_letter_events 表名不一致backport 自 io_erp m20260614_000197
///
/// 历史迁移 m20260428_000091 的 enum 名为 `DeadLetterEvent`单数DeriveIden
/// 派生时 Table 变体取 enum 名的蛇形 → 实际创建的表是 `dead_letter_event`(单数)。
/// 但 erp-core entity `dead_letter_event.rs` 的 `table_name = "dead_letter_events"`
/// (复数),导致 consume_with_retry 的 insert_dead_letter 查询「关系 dead_letter_events
/// 不存在」dead-letter 兜底功能自基座以来从未生效。
///
/// 本迁移将表 rename 为复数形式,与 entity 对齐。生产库若已存在单数表则 rename
/// 若不存在新建库091 迁移刚建的单数表)同样 rename。
#[derive(DeriveMigrationName)]
pub struct Migration;
#[async_trait::async_trait]
impl MigrationTrait for Migration {
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
// 先确认当前表名(单数存在 / 复数已存在 / 都不存在)
let singular_exists = manager
.has_table("dead_letter_event")
.await
.unwrap_or(false);
let plural_exists = manager
.has_table("dead_letter_events")
.await
.unwrap_or(false);
if singular_exists && !plural_exists {
// 标准情况091 迁移建了单数表rename 为复数
manager
.get_connection()
.execute_unprepared("ALTER TABLE \"dead_letter_event\" RENAME TO \"dead_letter_events\"")
.await?;
}
// 若 plural_exists已修复幂等no-op
// 若都不存在091 迁移未跑或被回滚,无需处理
Ok(())
}
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
// 回滚为单数(恢复 091 迁移的原始错误表名)
let plural_exists = manager
.has_table("dead_letter_events")
.await
.unwrap_or(false);
let singular_exists = manager
.has_table("dead_letter_event")
.await
.unwrap_or(false);
if plural_exists && !singular_exists {
manager
.get_connection()
.execute_unprepared("ALTER TABLE \"dead_letter_events\" RENAME TO \"dead_letter_event\"")
.await?;
}
Ok(())
}
}