⚠️ WIP: This project is currently in an experimental stage; It uses async trait support from rust 1.75.0 beta release
Automatic migration with charybdis_cmd/migrate:
Smart migration tool that enables automatic migration to database without need to write migrations by hand.
It expects src/models files and generates migrations based on differences between model definitions and database.
Installation
Usage
It supports following operations:
- Create new tables
- Create new columns
- Drop columns
- Create secondary indexes
- Drop secondary indexes
- Create UDTs (
src/models/udts) - Create materialized views (
src/models/materialized_views) - Table options
⚠️ If table exists, table options will result in alter table query that withoutCLUSTERING ORDERandCOMPACT STORAGEoptions.
🟢 Tables, Types and UDT dropping is not added. If you don't define model within src/model dir
it will leave db structure as it is.
⚠️ If you are working with existing datasets, before running migration you need to make sure that your model
definitions structure matches the database in respect to table names, column names, column types, partition keys,
clustering keys and secondary indexes so you don't alter structure accidentally.
If structure is matched, it will not run any migrations. As mentioned above,
in case there is no model definition for table, it will not drop it. In future,
we will add modelize command that will generate src/models files from existing data source.
Define Tables
Declare model as a struct within src/models dir:
// src/modles/user.rs
(Note we use src/models as automatic migration tool expects that dir)
Define UDT
Declare udt model as a struct within src/models/udts dir:
// src/models/udts/address.rs
Materialized Views
Declare view model as a struct within src/models/materialized_views dir:
use *;
Resulting auto-generated migration query will be:
CREATE MATERIALIZED VIEW IF NOT EXISTS users_by_email
AS SELECT created_at, updated_at, username, email, id
FROM users
WHERE email IS NOT NULL AND id IS NOT NULL
PRIMARY KEY (email, id)