1 个不稳定版本

0.0.1 2023年2月9日

#27#scylla


cqlmig-cdrs-tokio 使用

MIT/Apache

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(())
}

许可证

该项目受以下任一许可证的许可:

由您选择。

依赖关系

~8–11MB
~286K SLoC