1 个不稳定版本
0.0.1 | 2023年2月9日 |
---|
#27 在 #scylla
被 cqlmig-cdrs-tokio 使用
26KB
485 行
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许可证版本2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
依赖关系
~8–11MB
~286K SLoC