#postgresql #database-server #server #applications #linux-macos #part #embed

pg-embed-alternative

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

1 个不稳定版本

0.8.0-rc12024年7月1日

#1326数据库接口


entropy-game 中使用

MIT/Apache

65KB
1K SLoC

pg-embed-alternative

本 crate 的目的是创建一个基于此 仓库 的 pg-embed 版本 v0.8.0 的公共版本。

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 获取预编译的二进制文件。

依赖关系

~9–25MB
~396K SLoC