#postgresql #server #linux-macos #testing

pg-embed

在Linux、MacOS或Windows上作为其他Rust应用程序或测试的一部分运行Postgresql数据库

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

Download history 176/week @ 2024-03-13 300/week @ 2024-03-20 93/week @ 2024-03-27 153/week @ 2024-04-03 217/week @ 2024-04-10 189/week @ 2024-04-17 157/week @ 2024-04-24 145/week @ 2024-05-01 185/week @ 2024-05-08 308/week @ 2024-05-15 478/week @ 2024-05-22 561/week @ 2024-05-29 780/week @ 2024-06-05 1100/week @ 2024-06-12 862/week @ 2024-06-19 1130/week @ 2024-06-26

4,069 每月下载量
用于 6 个crate (2 直接)

MIT/Apache

65KB
1K SLoC

pg-embed

Crates.io Docs.rs Crates.io Crates.io

在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