9 个版本

0.1.8 2024年5月7日
0.1.7 2024年1月1日
0.1.6 2023年12月30日

数据库接口 中排名 1206

Download history 79/week @ 2024-04-19 37/week @ 2024-04-26 166/week @ 2024-05-03 37/week @ 2024-05-10 21/week @ 2024-05-17 37/week @ 2024-05-24 24/week @ 2024-05-31 178/week @ 2024-06-07 62/week @ 2024-06-14 19/week @ 2024-06-21 19/week @ 2024-06-28 16/week @ 2024-07-05 48/week @ 2024-07-12 53/week @ 2024-07-19 76/week @ 2024-07-26 29/week @ 2024-08-02

每月下载量 207

Apache-2.0

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