Skip to content
Charles
Go back

Rust 数据库迁移方案对比

Updated:
Edit page

Rust 没有唯一的迁移工具:SQLx、Diesel 和 SeaORM 都有各自方案,Refinery 则独立于 ORM。生产项目的共同默认值是版本化迁移:每次变更保存为新文件或模块,按序执行并记录历史。

先给结论

场景推荐选择理由
使用 SQLx,偏 SQL-firstSQLx Migrations与连接池、CLI 和 migrate! 集成直接
使用 DieselDiesel migrationsCLI、SQL 迁移和 schema.rs 工作流完整
使用 SeaORMSeaORM Migration异步迁移 crate,可用 SeaQuery 或 SQL
不想绑定 ORMRefinery独立迁移器,支持 SQL 和 Rust migration
多语言团队需要统一 Schema 治理Atlas统一生成、检查和管理版本化迁移

优先使用当前数据访问层自带的迁移工具。没有 ORM 约束时选 Refinery;只有在确实需要跨语言 diff 和 CI 风险检查时,再考虑 Atlas。

常见方案

SQLx Migrations

SQL-first 迁移,CLI 可执行迁移目录,也可用 sqlx::migrate! 将其嵌入二进制。SQLx 会记录迁移 checksum,发现已执行文件被改动。

Diesel migrations

以 up.sql / down.sql 为主,提供 CLI、迁移嵌入和 schema.rs 生成。可从 Schema diff 生成迁移草稿。

SeaORM Migration

迁移放在独立 crate 中,可用 SeaQuery 的 Rust API 或原始 SQL 编写,并提供异步 CLI、状态查询和 up/down 操作。

Refinery

独立于 ORM 的迁移器,支持 SQL 文件、Rust migration、CLI 和嵌入二进制;会检查迁移历史与 checksum。

Atlas

语言无关的 Schema-as-Code 工具,可生成版本化 SQL,并在 CI 中检查部分危险变更。

能力对比

方案主要输入可嵌入 / 发布方式回滚方式ORM 绑定生产建议
SQLxSQLmigrate!可选 .down.sqlSQLx适合
DieselSQLembed_migrations!down.sqlDiesel适合
SeaORMRust / SQL独立 migration crateup / downSeaORM适合
RefinerySQL / Rustembed_migrations! 或 CLI新增向前迁移无适合
AtlasSchema / SQL通常由 CI/CD 执行版本化迁移无适合统一治理

生产实践

参考资料

相关主题:项目选型。


Edit page
Share this post:

Previous Post
云端个人 AI 助手对比
Next Post
Go 新语法示例