5 个版本
0.0.5 | 2021年3月12日 |
---|---|
0.0.4 | 2021年2月5日 |
0.0.3 | 2020年12月31日 |
0.0.2 | 2020年12月11日 |
0.0.1 | 2020年10月10日 |
#2866 在 数据库接口
12KB
202 行
sqlx-simple-migrator
这个 crate 是一个非常轻量级的迁移框架。它简单地依次运行一系列 SQL 命令。它并不复杂。
让我们看看这个 crate 使用内置迁移来创建表的方式
pub fn migration() -> Migration {
Migration::new(NAME)
.with_up(
r#"
CREATE TABLE migrations (
name TEXT NOT NULL PRIMARY KEY,
executed_at TIMESTAMPTZ NOT NULL DEFAULT now()
)
"#,
)
.with_down(
r#"
DROP TABLE IF EXISTS migrations
"#,
)
}
目前,它针对 TIMESTAMPTZ 进行硬编码,这使得这个 crate 只适用于 Postgres。 @ecton 目前只使用这个 crate 与 Postgres 一起,但欢迎任何贡献使其更加通用。
每个 with_up
调用都是按照它添加到迁移结构中的顺序执行的。当回滚迁移时,with_down
指令以相反的顺序执行。这使得您可以在单个结构的基础上像上面示例中那样编写 with_up
和 with_down
,使上和下逻辑紧密相连。
如果您正在处理一个迁移并希望它每次都执行,只需在返回之前将 .debug()
添加到构建模式即可。 debug()
在没有 cfg(debug_assertions)
的构建上未启用,确保如果您使用 --release
进行部署,您永远不会意外部署一个仍然被标记为调试的迁移。
最后,如果您想测试从头开始重建数据库,可以使用 .nuclear_debug()
代替,这将强制每次运行都撤销所有迁移并重新执行它们。
执行迁移的模式如下
pub fn migrations() -> Vec<Migration> {
vec![
migration_0001_accounts::migration(),
// ...
]
}
pub async fn run_all() -> Result<(), MigrationError> {
let pool = connect_to_postgres();
Migration::run_all(&pool, migrations()).await
}
依赖项
~20–30MB
~546K SLoC