You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust项目中sqlx迁移PostgreSQL遇已应用迁移缺失错误的求助

sqlx迁移错误:已应用的迁移文件找不到的原因与解决方法

错误含义

sqlx会在PostgreSQL数据库中维护一张_sqlx_migrations表,记录所有已成功执行的迁移版本信息。执行sqlx migrate run时,它会扫描本地指定目录的迁移文件,再与数据库表中的记录对比。若数据库表中存在某迁移版本(如你遇到的20231103093446),但本地找不到对应文件,就会抛出该错误。

你未手动删除文件的情况下,可能的触发原因:

  • 迁移文件被误删(如IDE自动清理、系统垃圾回收)
  • 文件被移至sqlx未配置扫描的目录
  • 迁移文件的时间戳前缀被修改
  • sqlx配置指定了错误的迁移目录(默认是项目根目录下的migrations/)

解决方法

1. 确认本地文件状态

  • 用系统文件搜索工具查找包含20231103093446的文件,确认是否存在
  • 检查sqlx配置:
    • 查看Cargo.toml中[package.metadata.sqlx]段的migrations_dir值,确认指向正确目录
    • 或检查.sqlx/config.json文件中的migrations_dir配置

2. 根据文件存在情况处理

情况一:找到丢失的迁移文件

将文件移回sqlx配置的迁移目录,确保文件名与数据库记录的版本号完全一致,再重新执行sqlx migrate run。

情况二:确实找不到该文件

有两种可选方案:

  • 方案A:从版本控制恢复
    若项目使用Git等版本控制工具,从历史提交中找回对应的20231103093446_*.up.sql和20231103093446_*.down.sql文件,放到正确目录。
  • 方案B:修改数据库迁移记录(谨慎操作)
    1. 连接PostgreSQL数据库,查询该迁移详情:
      SELECT * FROM _sqlx_migrations WHERE version = '20231103093446';
      
    2. 确认该迁移内容无需保留或可重新执行后,删除这条记录:
      DELETE FROM _sqlx_migrations WHERE version = '20231103093446';
      
    注意:此操作会打破迁移记录与实际数据库结构的一致性,仅在明确无数据风险时使用。

3. 验证解决效果

执行sqlx migrate info查看所有迁移状态,确认无异常后,再次执行sqlx migrate run应用新迁移。

内容的提问来源于stack exchange,提问作者Mr Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 01:52:05