5 个版本 (3 个重大更新)
新功能 0.4.0 | 2024 年 8 月 17 日 |
---|---|
0.3.0 | 2024 年 5 月 2 日 |
0.2.1 | 2024 年 2 月 27 日 |
0.2.0 | 2024 年 2 月 18 日 |
0.1.0 | 2024 年 2 月 16 日 |
#291 在 数据库接口
每月 614 次下载
在 idcoop 中使用
44KB
610 行
pgtemp
pgtemp 是一个 Rust 库和 CLI 工具,允许您在不使用 Docker 的情况下轻松创建临时 PostgreSQL 服务器进行测试。
pgtemp Rust 库允许您在临时目录中启动一个 PostgreSQL 服务器,并返回一个包含主机、端口、用户名和密码的完整连接 URI。
pgtemp CLI 工具允许您更简单地建立临时连接,并与任何语言一起工作:运行 pgtemp,然后在测试中连接到数据库时使用其连接 URI。 pgtemp 将为每个接收到的连接启动一个新的 postgresql 进程 并将所有内容透明地代理到临时数据库。请注意,这意味着当您在单个测试中进行多次连接时,一个连接中做出的更改在另一个连接中是不可见的,除非您正在使用 pgtemp 的 --single
模式。
pgtemp 支持通过 pg_dump 将数据库从/到 dumpfiles 加载(和在库中导出)。
请注意,大多数情况下默认的 PostgreSQL 身份验证配置(pg_hba.conf
)允许所有本地连接。由于 pgtemp 只允许您创建监听在 localhost 的服务器,这意味着在大多数情况下您不需要提供密码来连接。您可以在 PgTempDBBuilder::with_config_param
中设置服务器的 hba_file
参数或使用 pgtemp 守护进程的 -o
标志将 hba_file
传递到那里。
要求
您必须安装 PostgreSQL 客户端和服务器软件包。在 Debian/Ubuntu 上,它们是 postgresql postgresql-client
,在 Fedora 上它们是 postgresql postgresql-server
,在 Arch Linux 上它们是 postgresql postgresql-libs
。请注意,Debian/Ubuntu 将标准 PostgreSQL 二进制文件安装到自己的目录中,因此您必须将它们添加到您的路径。对于 Ubuntu GitHub Actions 运行器,它看起来像
steps:
- name: Install postgres
run: sudo apt-get install postgresql postgresql-client
- name: Update path
run: find /usr/lib/postgresql/ -type d -name "bin" >> $GITHUB_PATH
要安装 CLI 工具,您必须使用 --features cli 或 --all-features 选项安装它
cargo install pgtemp --features cli
设计
pgtemp是一个相对简单的程序,并且存在其他现有的库,如为Python的testing.postgresql和为Go的pgtest,它们都以相同的方式工作。
- 进行一些设置,例如创建临时目录和复制文件。
- 运行
initdb
程序。 - 启动PostgreSQL服务器。
- 等待PostgreSQL启动。
pgtemp的独特之处(据我所知,尽管我在想出初始库的想法之后才了解到上述Python/Go库)是CLI/守护进程,它在每次连接时自动提供对新临时数据库的连接。
示例
CLI
$ cargo install --all-features pgtemp
# username, password, port, and database name are all configurable based on the provided connection URI
$ pgtemp postgresql://127.0.0.1:6543/mytestdb
starting pgtemp server at postgresql://postgres:password@localhost:6543/mytestdb
$ psql postgresql://postgres:password@localhost:6543/mytestdb
psql (16.1)
Type "help" for help.
postgres=#
请参阅examples/目录以获取示例。
- 一个使用sqlalchemy和alembic的Python示例,演示了使用pgtemp CLI的正常和单模式的使用。
库
use pgtemp::PgTempDB;
use sqlx::postgres::PgConnection;
use sqlx::prelude::*;
#[tokio::test]
fn cool_db_test() {
let db = PgTempDB::async_new().await;
let mut conn = sqlx::postgres::PgConnection::connect(&db.connection_uri())
.await
.expect("failed to connect to temp db");
// ... do the rest of your test
// db is shut down and files cleaned up upon drop at the end of the test
}
示例
- 一个使用axum的简单diesel示例。
- 一个更复杂的“任务队列”示例,使用触发器和LISTEN/NOTIFY与sqlx和axum。
请参阅tests/目录以获取完整的库使用说明。
依赖关系
约5-15MB
约219K SLoC