1 个不稳定版本
0.1.0 | 2020年11月14日 |
---|
#2627 in 数据库接口
用于 oapth-cli
97KB
2.5K SLoC
Oapth
通过SQL迁移提供数据库的灵活版本控制。支持嵌入和CLI工作流程的MS-SQL、MariaDB、MySQL、PostgreSQL和SQLite。
此项目已完全文档化,在部分目标上应用模糊测试,且不使用expect
、panic
、unsafe
或unwrap
。
CLI
CLI应用程序期望一个配置文件,其中包含一组路径,其中每个路径都是一个包含多个迁移的目录。
migrations/1__initial
migrations/2__create_post
每个提供的迁移和组必须包含一个唯一的版本和一个名称,其结构如下
migrations
+-- 1__initial (Group)
+-- 1__create_author.sql (Migration)
+-- 2__create_post.sql (Migration)
+-- 2__fancy_stuff (Group)
+-- 1__something_fancy.sql (Migration)
Group
:一组必须也包含唯一版本和名称的迁移。Migration
:一个只能执行一次且不能修改的迁移。
SQL文件本身由两部分组成,一部分是迁移部分(-- oapth UP
部分)和另一部分是回滚部分(-- oapth DOWN
部分)。
-- oapth UP
CREATE TABLE author (
id INT NOT NULL PRIMARY KEY,
added TIMESTAMP NOT NULL,
birthdate DATE NOT NULL,
email VARCHAR(100) NOT NULL,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL
);
-- oapth DOWN
DROP TABLE author;
迁移和迁移组之间的执行顺序由它们的数字声明顺序决定。
库
库允许自由地安排组,并使用arrayvec
、chrono
和siphash作为强制内部crate,这将为您的应用程序带来总共6个依赖项。如果这种行为不可接受,那么您可能应该放弃库,而是使用CLI二进制文件作为自定义部署策略的一部分。
// oapth = { features = ["with-sqlx-postgres", "with-sqlx-runtime-async-std"], version = "SOME_VERSION" }
use oapth::{Commands, Config, SqlxPostgres};
use std::path::Path;
#[async_std::main]
async fn main() -> oapth::Result<()> {
let config = Config::with_url_from_default_var()?;
let mut commands = Commands::new(SqlxPostgres::new(&config).await?);
commands.migrate_from_dir(Path::new("my_custom_migration_group_path"), 128).await?;
Ok(())
}
值得注意的是,这些强制依赖项可能已经作为瞬态部分包含在您的应用程序中。如有疑问,请检查您的Cargo.lock
文件或使用cargo tree
进行分析。
默认无功能特性
为了实际运行事务,有必要指定所需的功能,否则您将获得大量不会做太多的事情的代码。请参阅支持的 backs。
cargo install oapth-cli
oapth migrate # Will do nothing
支持的backs
每个后端在库使用时都有一个可选的功能
oapth = { features = ["with-tokio-postgres"], version = "SOME_VERSION" }
- Diesel(MariaDB/Mysql) -
with-diesel-mssql
- Diesel(PostgreSQL) -
with-diesel-mysql
- Diesel(SQLite) -
with-diesel-postgres
- mysql_async -
with-mysql_async
- rusqlite -
with-rusqlite
- SQLx(MariaDB/MySql) -
with-sqlx-mysq
- SQLx(MS-SQL) -
with-sqlx-mssql
- SQLx(PostgreSQL) -
with-sqlx-postgres
- SQLx(SQLite) -
with-sqlx-sqlite
- tiberius -
with-tiberius
- tokio-postgres -
with-tokio-postgres
或者在安装CLI二进制文件时
cargo install oapth-cli --features "postgres"
mssql
mysql
postgres
sqlite
Diesel支持
仅支持迁移,并且模式打印仍在开发中。对于任何不受支持的用例,请使用官方的Diesel CLI二进制文件。
命名空间/模式
对于支持的数据库,没有直接的用户参数可以将迁移插入单个数据库模式中,但可以在SQL文件中指定模式,并按照最适合您的方式安排迁移组结构。
-- oapth UP
CREATE SCHEMA cool_department_schema;
CREATE TABLE cool_department_schema.author (
id INT NOT NULL PRIMARY KEY,
full_name VARCHAR(50) NOT NULL
);
-- oapth DOWN
DROP TABLE cool_department_schema.author;
DROP SCHEMA cool_department_schema;
迁移时区
对于PostgreSQL(除Diesel外),迁移时间戳以数据库中声明的时间区存储和检索。对于其他所有内容,时间戳为UTC。
后端 | 类型 |
---|---|
Diesel(MariaDB/Mysql) | UTC |
Diesel(PostgreSQL) | UTC |
Diesel(SQLite) | UTC |
mysql_async | UTC |
rusqlite | UTC |
SQLx(MariaDB/MySql) | UTC |
SQLx(MS-SQL) | UTC |
SQLx(PostgreSQL) | 固定时区 |
SQLx(SQLite) | UTC |
tiberius | UTC |
tokio-postgres | 固定时区 |
依赖项
~1–23MB
~357K SLoC