1 个不稳定版本
0.8.0-rc1 | 2024年7月1日 |
---|
#1326 在 数据库接口
在 entropy-game 中使用
65KB
1K SLoC
pg-embed-alternative
本 crate 的目的是创建一个基于此 仓库 的 pg-embed 版本 v0.8.0 的公共版本。
在 Linux、MacOS 或 Windows 上作为其他 Rust 应用程序或测试的一部分运行 Postgresql 数据库。
pg-embed 当前支持的异步运行时是 tokio。
用法
-
将 pg-embed 添加到您的 Cargo.toml
无 sqlx 迁移支持的库
# Cargo.toml [dependencies] pg-embed = { version = "0.7", default-features = false, features = ["rt_tokio"] }
有 sqlx 迁移支持的库
# Cargo.toml [dependencies] pg-embed = "0.7"
示例
use pg_embed::postgres::{PgEmbed, PgSettings, PgAuthMethod};
use pg_embed::fetch;
use pg_embed::fetch::{PgFetchSettings, PG_V13};
use std::time::Duration;
use std::path::PathBuf;
/// Postgresql settings
let pg_settings = PgSettings{
// Where to store the postgresql database
database_dir: PathBuf::from("data/db"),
port: 5432,
user: "postgres".to_string(),
password: "password".to_string(),
// authentication method
auth_method: PgAuthMethod::Plain,
// If persistent is false clean up files and directories on drop, otherwise keep them
persistent: false,
// duration to wait before terminating process execution
// pg_ctl start/stop and initdb timeout
// if set to None the process will not be terminated
timeout: Some(Duration::from_secs(15)),
// If migration sql scripts need to be run, the directory containing those scripts can be
// specified here with `Some(PathBuf(path_to_dir)), otherwise `None` to run no migrations.
// To enable migrations view the **Usage** section for details
migration_dir: None,
};
/// Postgresql binaries download settings
let fetch_settings = PgFetchSettings{
version: PG_V13,
..Default::default()
};
/// async block only to show that these methods need to be executed in an async context
async {
// Create a new instance
let mut pg = PgEmbed::new(pg_settings, fetch_settings).await?;
// Download, unpack, create password file and database cluster
pg.setup().await;
// start postgresql database
pg.start_db().await;
// create a new database
// to enable migrations view the [Usage] section for details
pg.create_database("database_name").await;
// drop a database
// to enable migrations view [Usage] for details
pg.drop_database("database_name").await;
// check database existence
// to enable migrations view [Usage] for details
pg.database_exists("database_name").await;
// run migration sql scripts
// to enable migrations view [Usage] for details
pg.migrate("database_name").await;
// stop postgresql database
pg.stop_db().await;
};
// get the base postgresql uri
// `postgres://{username}:{password}@localhost:{port}`
let pg_uri: &str = &pg.db_uri;
// get a postgresql database uri
// `postgres://{username}:{password}@localhost:{port}/{specified_database_name}`
let pg_db_uri: String = pg.full_db_uri("database_name");
信息
下载的 postgresql 二进制文件缓存在以下目录中
-
在 Linux 上
$XDG_CACHE_HOME/pg-embed
或
$HOME/.cache/pg-embed
-
在 Windows 上
{FOLDERID_LocalAppData}/pg-embed
-
在 MacOS 上
$HOME/Library/Caches/pg-embed
最近的重大更改
pg-embed 遵循语义版本控制,因此只有在大版本升级时才会发生重大更改。此规则的唯一例外是因实现而被认为是错误、安全担忧或可以合理证明不会影响任何代码的更改。有关详细信息,请参阅 CHANGELOG.md。
许可证
pg-embed 在 MIT 许可下授权。请阅读此仓库中的 LICENSE-MIT 文件以获取更多信息。
注意
依赖于 zonkyio/embedded-postgres-binaries 所做的出色工作,以从 Maven 获取预编译的二进制文件。
依赖关系
~9–25MB
~396K SLoC