#postgresql

pgdo-lib

SQLite的便捷性,但使用PostgreSQL(库包)

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数据库接口

Download history 25/week @ 2024-05-02 74/week @ 2024-05-09 79/week @ 2024-05-16 47/week @ 2024-05-23 53/week @ 2024-05-30 70/week @ 2024-06-06 33/week @ 2024-06-13 22/week @ 2024-06-20 5/week @ 2024-06-27 27/week @ 2024-07-04 25/week @ 2024-07-11 125/week @ 2024-07-18 73/week @ 2024-07-25 8/week @ 2024-08-01 32/week @ 2024-08-08 44/week @ 2024-08-15

187 每月下载量
pgdo-cli 中使用

Apache-2.0

180KB
3.5K SLoC

⚠️ 预览版 ⚠️

该项目处于开发早期阶段。功能远未完善。它可能包含许多错误和不一致。文档有限或不存在。它将以破坏向后兼容性的方式改变。不建议在生产环境中使用

尽管如此,如果您想尝试它,请务必尝试!但请注意,它正在频繁更新,至少在我写作时是这样的,您也应该期望它经常更新。请在此处检查已知问题并提交新问题 here

谢谢!Gavin。


pgdo-lib

pgdo CI

一个专注于便捷性和快速原型设计的Rust库,用于创建独立PostgreSQL集群和数据库,类似于使用SQLite。将开发人员体验简化,以满足那些致力于构建新事物、快速构建的人,这是该项目的关键目标。

它继承了rust-postgresfixture项目的代码,但与该项目目标和设计有所不同。很久以前,我们可以追溯这个工具的起源到Python postgresfixture 库中的想法,该库在MAAS中得到了广泛使用。那是一个(现在仍然是)在实验PostgreSQL时非常有用的工具。例如,我们可以使用它来启动一个集群以运行开发服务器。然而,它在MAAS的测试套件中真正发挥作用,是使MAAS的测试套件更快的关键。

命令行应用程序

有一个使用此库的命令行应用程序pgdo。这可能是有助于了解pgdo工作方式的最佳方式。

它作为pgdo-cli发布在Crates.ioLib.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_stoprun_and_destroy。这些函数在设置和清理集群时添加了锁定机制,以便多个进程可以安全地共享单个按需集群。

贡献

如果您想对这个代码进行修改,以下是开始的步骤

运行测试

在安装了源代码(见上文)后,使用以下命令运行测试: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 的新版本

此工作空间中的包将一起发布,具有相同的版本号,并且它们必须按照一定顺序上传。

  1. 在顶层(工作空间)的 Cargo.toml 中提升版本号。
  2. pgdo-cli/Cargo.toml 中,将 pgdo-lib 的依赖项更新为新版本,与上一步相同。
  3. 运行 cargo update --workspace 以确保 Cargo.lock 是最新的。
  4. 将更新的 -h 输出粘贴到 pgdo-cli 的 README.md。在 macOS 上,命令 cargo run -- -h | pbcopy 很有用。**注意**,--help 输出与 -h 输出不同:它更详细,不适合概述。
  5. 构建、测试、文档:cargo build && cargo test && cargo doc --no-deps
  6. 使用消息 "将版本升级到 $VERSION" 提交所有内容。
  7. 使用 "v$VERSION" 标签,例如 git tag v1.0.10
  8. 推送:git push && git push --tags
  9. 发布库:cargo publish --package pgdo-lib
  10. 发布二进制文件:cargo publish --package pgdo-cli

许可证

此软件包根据Apache 2.0 许可证授权。

依赖项

~26–40MB
~548K SLoC