Crate postgresql_embedded

source ·
Expand description

§postgresql_embedded

Code Coverage Benchmarks License Semantic Versioning

Install and run a PostgreSQL database locally on Linux, MacOS or Windows. PostgreSQL can be bundled with your application, or downloaded on demand.

§Table of contents

§Examples

§Asynchronous API

use postgresql_embedded::{PostgreSQL, Result};

#[tokio::main]
async fn main() -> Result<()> {
    let mut postgresql = PostgreSQL::default();
    postgresql.setup().await?;
    postgresql.start().await?;

    let database_name = "test";
    postgresql.create_database(database_name).await?;
    postgresql.database_exists(database_name).await?;
    postgresql.drop_database(database_name).await?;

    postgresql.stop().await
}

§Synchronous API

#[cfg(feature = "blocking")] {
use postgresql_embedded::blocking::PostgreSQL;

let mut postgresql = PostgreSQL::default();
postgresql.setup().unwrap();
postgresql.start().unwrap();

let database_name = "test";
postgresql.create_database(database_name).unwrap();
postgresql.database_exists(database_name).unwrap();
postgresql.drop_database(database_name).unwrap();

postgresql.stop().unwrap();
}

§Information

During the build process, when the bundled feature is enabled, the PostgreSQL binaries are downloaded and included in the resulting binary. The version of the PostgreSQL binaries is determined by the POSTGRESQL_VERSION environment variable. If the POSTGRESQL_VERSION environment variable is not set, then postgresql_archive::LATEST will be used to determine the version of the PostgreSQL binaries to download.

When downloading the theseus PostgreSQL binaries, either during build, or at runtime, the GITHUB_TOKEN environment variable can be set to a GitHub personal access token to increase the rate limit for downloading the PostgreSQL binaries. The GITHUB_TOKEN environment variable is not required.

At runtime, the PostgreSQL binaries are cached by default in the following directories:

  • Unix: $HOME/.theseus/postgresql
  • Windows: %USERPROFILE%\.theseus\postgresql

Performance can be improved by Using a specific version of the PostgreSQL binaries (e.g. =16.4.0). After the first download, the PostgreSQL binaries will be cached and reused for subsequent runs. Further, the repository will no longer be queried to calculate the version match.

§Feature flags

postgresql_embedded uses feature flags to address compile time and binary size uses.

The following features are available:

NameDescriptionDefault?
bundledBundles the PostgreSQL archive into the resulting binaryNo
blockingEnables the blocking API; requires tokioNo
native-tlsEnables native-tls supportYes
rustls-tlsEnables rustls-tls supportNo
theseusEnables theseus PostgreSQL binariesYes
tokioEnables using tokio for asyncNo
zonkyEnables zonky PostgreSQL binariesNo

§Safety

These crates use #![forbid(unsafe_code)] to ensure everything is implemented in 100% safe Rust.

§License

Licensed under either of

at your option.

PostgreSQL is covered under The PostgreSQL License.

Modules§

Structs§

Enums§

  • Errors that can occur when using PostgreSQL embedded
  • PostgreSQL status

Constants§

Statics§

  • The latest PostgreSQL version requirement
  • V12Deprecated
    The latest PostgreSQL version 12
  • The latest PostgreSQL version 13
  • The latest PostgreSQL version 14
  • The latest PostgreSQL version 15
  • The latest PostgreSQL version 16

Type Aliases§

  • PostgreSQL embedded result type