7次发布
0.4.3 | 2024年7月23日 |
---|---|
0.4.2 | 2024年4月8日 |
0.4.1 | 2023年12月6日 |
0.3.1 | 2023年10月11日 |
0.2.0 | 2023年10月9日 |
#212 在 数据库接口
187 每月下载量
在 pgdo-cli 中使用
180KB
3.5K SLoC
⚠️ 预览版 ⚠️
该项目处于开发早期阶段。功能远未完善。它可能包含许多错误和不一致。文档有限或不存在。它将以破坏向后兼容性的方式改变。不建议在生产环境中使用。
尽管如此,如果您想尝试它,请务必尝试!但请注意,它正在频繁更新,至少在我写作时是这样的,您也应该期望它经常更新。请在此处检查已知问题并提交新问题 here。
谢谢!Gavin。
pgdo-lib
一个专注于便捷性和快速原型设计的Rust库,用于创建独立PostgreSQL集群和数据库,类似于使用SQLite。将开发人员体验简化,以满足那些致力于构建新事物、快速构建的人,这是该项目的关键目标。
它继承了rust-postgresfixture项目的代码,但与该项目目标和设计有所不同。很久以前,我们可以追溯这个工具的起源到Python postgresfixture 库中的想法,该库在MAAS中得到了广泛使用。那是一个(现在仍然是)在实验PostgreSQL时非常有用的工具。例如,我们可以使用它来启动一个集群以运行开发服务器。然而,它在MAAS的测试套件中真正发挥作用,是使MAAS的测试套件更快的关键。
命令行应用程序
有一个使用此库的命令行应用程序pgdo
。这可能是有助于了解pgdo工作方式的最佳方式。
它作为pgdo-cli发布在Crates.io和Lib.rs。
作为库使用
此crate中的核心功能在Cluster
结构及其实现中。这包括创建、运行和销毁任何官方支持版本(以及一些不受上游支持的老版本)的PostgreSQL集群所需的所有逻辑。
use pgdo::{
cluster::{
Cluster, ClusterError,
sqlx::{query, Row}
},
runtime::{
self,
strategy::StrategyLike,
},
};
let tokio = tokio::runtime::Runtime::new()?;
for runtime in runtime::strategy::Strategy::default().runtimes() {
let data_dir = tempfile::tempdir()?;
let cluster = Cluster::new(&data_dir, runtime)?;
cluster.start(&[])?;
assert_eq!(cluster.databases()?, vec!["postgres", "template0", "template1"]);
let rows = tokio.block_on(async {
let pool = cluster.pool(None)?;
let rows = query("SELECT 1234 -- …").fetch_all(&pool).await?;
Ok::<_, ClusterError>(rows)
})?;
let collations: Vec<i32> = rows.iter().map(|row| row.get(0)).collect();
assert_eq!(collations, vec![1234]);
cluster.stop()?;
}
# Ok::<(), ClusterError>(())
然而,您可能希望与 coordinate
模块中的函数一起使用,例如 run_and_stop
和 run_and_destroy
。这些函数在设置和清理集群时添加了锁定机制,以便多个进程可以安全地共享单个按需集群。
贡献
如果您想对这个代码进行修改,以下是开始的步骤
- 安装 Cargo,
- 克隆此仓库,
- 构建它:
cargo build
。
运行测试
在安装了源代码(见上文)后,使用以下命令运行测试:cargo test
。
大多数测试都使用 pgdo 的平台特定知识来测试安装的所有 PostgreSQL 运行时。在编写新测试时,尽量模仿现有测试的模式,以确保这些测试具有最广泛的覆盖范围。具体来说,这意味着
-
在您的机器上安装多个版本的 PostgreSQL。有关平台特定说明,请继续阅读。
-
[[code][runtime::strategy::Strategy::default()]] 可能能够自动找到已安装的运行时 – 这是测试使用的函数。
-
如果 pgdo 的平台特定知识未覆盖您的平台,请尝试添加。[[code][runtime::strategy::RuntimesOnPlatform]] 是一个很好的起点。
Debian & Ubuntu
从 [[code][https://wiki.postgresql.ac.cn/wiki/Apt]]
$ sudo apt-get install -y postgresql-common
$ sudo sh /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -y
$ sudo apt-get install -y postgresql-{9.{4,5,6},10,11,12,13} # Adjust as necessary.
macOS
使用 [[code][https://brew.sh.cn/]]
$ brew install postgresql # Latest version.
$ brew install postgresql@{9.{4,5,6},10,11,12,13} # Adjust as necessary.
发布 pgdo-cli 和 pgdo-lib 的新版本
此工作空间中的包将一起发布,具有相同的版本号,并且它们必须按照一定顺序上传。
- 在顶层(工作空间)的
Cargo.toml
中提升版本号。 - 在
pgdo-cli/Cargo.toml
中,将pgdo-lib
的依赖项更新为新版本,与上一步相同。 - 运行
cargo update --workspace
以确保Cargo.lock
是最新的。 - 将更新的
-h
输出粘贴到 pgdo-cli 的README.md
。在 macOS 上,命令cargo run -- -h | pbcopy
很有用。**注意**,--help
输出与-h
输出不同:它更详细,不适合概述。 - 构建、测试、文档:
cargo build && cargo test && cargo doc --no-deps
。 - 使用消息 "将版本升级到
$VERSION
" 提交所有内容。 - 使用 "v
$VERSION
" 标签,例如git tag v1.0.10
。 - 推送:
git push && git push --tags
。 - 发布库:
cargo publish --package pgdo-lib
。 - 发布二进制文件:
cargo publish --package pgdo-cli
。
许可证
此软件包根据Apache 2.0 许可证授权。
依赖项
~26–40MB
~548K SLoC