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:
@@ -56,6 +56,7 @@ mod m20260513_000144_enforce_version_optimistic_lock;
|
||||
mod m20260518_000149_fix_admin_permissions;
|
||||
mod m20260529_000169_supplement_rls_for_new_tables;
|
||||
mod m20260613_000170_drop_wechat_users;
|
||||
mod m20260615_000171_rename_dead_letter_event_table;
|
||||
|
||||
pub struct Migrator;
|
||||
|
||||
@@ -117,6 +118,7 @@ impl MigratorTrait for Migrator {
|
||||
Box::new(m20260518_000149_fix_admin_permissions::Migration),
|
||||
Box::new(m20260529_000169_supplement_rls_for_new_tables::Migration),
|
||||
Box::new(m20260613_000170_drop_wechat_users::Migration),
|
||||
Box::new(m20260615_000171_rename_dead_letter_event_table::Migration),
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user