Crates.io | surrealdb_migration_engine |
lib.rs | surrealdb_migration_engine |
version | 0.3.0 |
source | src |
created_at | 2024-01-31 08:55:56.447724 |
updated_at | 2024-09-18 08:37:38.272948 |
description | Migration engine for surrealdb |
homepage | |
repository | https://github.com/mcmah309/surrealdb_migration_engine |
max_upload_size | |
id | 1121536 |
size | 18,195 |
A simple and powerful migration engine for SurrealDB. All you need to get it working is the following:
#[derive(rust_embed::RustEmbed)]
#[folder = "migrations"]
struct MigrationFiles;
#[derive(rust_embed::RustEmbed)]
#[folder = "schema"]
struct SchemaFiles;
async fn main() {
// create surealdb `client`
surrealdb_migration_engine::run::<MigrationFiles,SchemaFiles>(&client).await?;
// the rest of your code
}
surrealdb_migration_engine
works on two concepts Migrations and Schemas. Migrations are queries (changes) to an apply to an existing schema. Schemas are queries that set up the db structure. Schemas and migrations reside in their own directory with each file being numbered in order e.g. 0001_add_age_to_user_table.surql
. Each of these directories is compiled with your binary with the help of the rust_embed
crate. This means that the appropriate migrations or schema creation will happen at runtime. All migrations and schema changes are done in a single transaction, so if one fails, they all fail.
surrealdb_migration_engine
creates a migrations
table inside your database to track which migrations have ran. The logic flow works like this:
migrations
table does not exist, run only the schema files, create a migrations
table and add all of the current migration files to the table.migrations
table does exist, run any migration files that are not in the migrations
table and insert those migrations in the migrations
table.Simple yet very expressive!
surrealdb_migration_engine
in your application so whenever you run your application, the schema is always up to date.surrealdb_migration_engine
in a barebones executable that runs the necessary migrations or schema creation whenever you want them to occur.