9 个版本
0.1.8 | 2024年5月7日 |
---|---|
0.1.7 | 2024年1月1日 |
0.1.6 | 2023年12月30日 |
在 数据库接口 中排名 1206
每月下载量 207
39KB
698 行
SurrealDB 迁移器
为 SurrealDB 提供迁移库。
示例
cargo add surrealdb-migrator
使用迁移脚本代码
use surrealdb_migrator::{Migrations, M};
let db = surrealdb::engine::any::connect("mem://");
let migrations = Migrations::new(vec![
M::up("DEFINE TABLE animal; DEFINE FIELD name ON animal TYPE string;").down("REMOVE TABLE user;"),
M::up("DEFINE TABLE food; DEFINE FIELD name ON food TYPE string;").down("REMOVE TABLE food;"),
]);
// Go to the latest version
migrations.to_latest(&db).unwrap();
// Go to a specific version
migrations.to_version(&db, 0).unwrap();
使用文件进行迁移脚本
迁移被加载并存储在二进制文件中。需要启用 from-directory
特性标志。
由 include_dir!()
指向的迁移目录必须包含符合给定模式的子目录:{usize id indicating the order}-{方便的迁移名称}
这些目录必须至少包含一个包含有效向上迁移的 up.surql
文件。它们也可以包含一个包含向下迁移的 down.surql
文件。
示例结构
migrations
├── 01-friend_car
│ └── up.surql
├── 02-add_birthday_column
│ └── up.surql
└── 03-add_animal_table
├── down.surql
└── up.surql
use include_dir::{include_dir, Dir}; // cargo add include_dir
static MIGRATION_DIR: Dir = include_dir!("$CARGO_MANIFEST_DIR/migrations");
let migrations = Migrations::from_directory(&MIGRATION_DIR).unwrap();
migrations.to_latest(&db).await?;
LICENSE
Apache 许可证
致谢
感谢 rusqlite_migration,surrealdb-migrator 的代码灵感来源于此。
依赖项
~44–77MB
~1.5M SLoC