az-persistence
自动收集自
crates/data/az-persistence/README.md。
Workspace 级 PostgreSQL 持久化基础设施,提供统一的数据库连接建立、URL 发现和 SeaORM schema 迁移管理。
功能
- 数据库 URL 发现:按优先级从环境变量(
MSC_AIO_DATABASE_URL>DATABASE_URL)或~/.config/aio/aio.env配置文件读取连接地址 - 连接管理:通过
PersistenceContext封装 SeaORMDatabaseConnection,自动配置连接池参数 - Workspace 迁移:首次连接时自动执行所有 workspace 级 SQL 迁移,支持并发安全
- 并发迁移冲突处理:自动检测并忽略并发执行迁移时的主键冲突
- 无效迁移记录清理:连接时自动清除
lib级别的无效seaql_migrations记录
安装
在 Cargo.toml 中添加:
[dependencies]
az-persistence = { path = "../az-persistence" } # workspace 内部引用
# 或发布后:
# az-persistence = "0.1" # crates.io 引用
用法
use az_persistence::PersistenceContext;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 自动从环境变量或配置文件发现数据库 URL 并建立连接
let ctx = PersistenceContext::connect().await?;
// 获取 SeaORM DatabaseConnection
let db = ctx.db();
// ... 使用 db 进行数据库操作
Ok(())
}
也可以指定连接地址:
let ctx = PersistenceContext::connect_with_url("postgresql://user:pass@localhost/mydb").await?;
依赖的 crates
sea-orm/sea-orm-migration— 数据库 ORM 和迁移框架async-trait— async trait 支持thiserror— 错误类型派生tokio— 异步运行时(用于迁移锁)