10 releases
0.2.1 | Sep 23, 2024 |
---|---|
0.1.8 | May 7, 2024 |
0.1.7 | Jan 1, 2024 |
0.1.6 | Dec 30, 2023 |
#1133 in Database interfaces
45 downloads per month
40KB
701 lines
SurrealDB Migrator
Migrator library for SurrealDB.
Example
cargo add surrealdb-migrator
Using code for migration scripts
use surrealdb_migrator::{Migrations, M};
let db = surrealdb::engine::any::connect("mem://").unwrap();
db.use_ns("sample").use_db("sample").await.unwrap();
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();
Using files for migration script
The migrations are loaded and stored in the binary. from-directory
feature flags needs to be enabled.
The migration directory pointed to by include_dir!()
must contain
subdirectories in accordance with the given pattern:
{usize id indicating the order}-{convenient migration name}
Those directories must contain at least an up.surql
file containing a valid upward
migration. They can also contain a down.surql
file containing a downward migration.
Example structure
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?;
Surrealdb Compatiblitiy
surrealdb-migrator version | surrealdb version |
---|---|
0.1.8 |
>= 1.5.0 && < 2.x |
0.2.x |
>= 2.0.0 && < 3.x |
LICENSE
Apache License
Acknowledgments
Thanks to rusqlite_migration where the code for surrealdb-migrator is inspired from.
Dependencies
~73MB
~1.5M SLoC