27次发布
0.7.1 | 2022年12月27日 |
---|---|
0.6.5 | 2021年11月5日 |
0.6.1 | 2021年7月22日 |
0.5.4 | 2021年7月22日 |
0.1.3 | 2021年3月23日 |
#408 在 数据库接口
4,069 每月下载量
用于 6 个crate (2 直接)
65KB
1K SLoC
pg-embed
在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获取预编译的二进制文件。
依赖关系
~3–22MB
~307K SLoC