1个不稳定版本
0.0.1 | 2023年2月9日 |
---|
#29 在 #scylla
36KB
603 行
CQL迁移器
在CQL数据库(Casandra或ScyllaDB)上运行迁移。
此crate处于alpha版本!请谨慎使用!
cqlmig简单地按提供的顺序在数据库上运行一系列迁移,以下是一些注意事项/保证:
- 迁移按顺序排序并运行。
- 迁移只运行一次。
- 没有锁/事务,请确保从单个实例运行迁移。
- 没有事务,损坏的迁移不会被回滚。
- 不支持批处理语句,这主要是因为文件解析的方式很随意。
- 多次调用
migrate
且版本顺序不正确不会产生错误,除非数据库产生错误。换句话说,cqlmig在运行较旧版本之后不会产生错误。这种情况通常发生在将较旧的分支与较旧的迁移合并时。理想情况下,你希望在PR中捕获此场景,或者更好的是让你的管道失败,而不是在运行时恐慌。不是在为其辩护;如果您的需求不同,我很乐意添加一个选项标志。 - 不支持多行注释。
- CQL语句必须用 ';' (分号) 和 '\n' (换行符) 分隔。
- 所有内容都读入内存,当有大量大型迁移时可能会消耗一些资源。
- 文件I/O不是异步的。
- 还有很多其他...
extern crate core;
use std::borrow::Borrow;
use std::error::Error;
use std::path::Path;
use cdrs_tokio::cluster::NodeTcpConfigBuilder;
use cdrs_tokio::cluster::session::{SessionBuilder, TcpSessionBuilder};
use cdrs_tokio::load_balancing::RoundRobinLoadBalancingStrategy;
use cqlmig_cdrs_tokio::{CdrsDbSession, CqlMigrator, DbSession, Migration};
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let cluster_config = NodeTcpConfigBuilder::new()
.with_contact_point(String::from("localhost:9042").into())
.build()
.await
.unwrap();
let db = TcpSessionBuilder::new(
RoundRobinLoadBalancingStrategy::new(),
cluster_config)
.build()
.unwrap()
.borrow()
.into();
CqlMigrator::default()
.with_logger(|s| println!("{}", s))
.migrate(&db, Migration::from_path(Path::new("/migrations").into()).unwrap())
.await?;
Ok(())
}
许可证
该项目许可协议为以下之一:
- Apache License,版本2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
依赖关系
~16–28MB
~503K SLoC