Crates.io | postgresql_embedded |
lib.rs | postgresql_embedded |
version | 0.17.3 |
source | src |
created_at | 2024-02-10 02:28:59.03515 |
updated_at | 2024-11-12 20:20:24.558799 |
description | Install and run a PostgreSQL database locally on Linux, MacOS or Windows. PostgreSQL can be bundled with your application, or downloaded on demand. |
homepage | |
repository | https://github.com/theseus-rs/postgresql-embedded |
max_upload_size | |
id | 1134674 |
size | 67,262 |
Install and run a PostgreSQL database locally on Linux, MacOS or Windows. PostgreSQL can be bundled with your application, or downloaded on demand.
This library provides an embedded-like experience for PostgreSQL similar to what you would have with SQLite. This is accomplished by downloading and installing PostgreSQL during runtime. There is also a "bundled" feature that when enabled, will download the PostgreSQL installation archive at compile time, include it in your binary and install from the binary version at runtime. In either case, PostgreSQL will run in a separate process space.
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
}
use postgresql_embedded::Result;
use postgresql_embedded::blocking::PostgreSQL;
fn main() -> Result<()> {
let mut postgresql = PostgreSQL::default();
postgresql.setup()?;
postgresql.start()?;
let database_name = "test";
postgresql.create_database(database_name)?;
postgresql.database_exists(database_name)?;
postgresql.drop_database(database_name)?;
postgresql.stop()
}
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:
$HOME/.theseus/postgresql
%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.
postgresql_embedded uses feature flags to address compile time and binary size uses.
The following features are available:
Name | Description | Default? |
---|---|---|
bundled |
Bundles the PostgreSQL archive into the resulting binary | No |
blocking |
Enables the blocking API; requires tokio |
No |
native-tls |
Enables native-tls support | Yes |
rustls-tls |
Enables rustls-tls support | No |
theseus |
Enables theseus PostgreSQL binaries | Yes |
tokio |
Enables using tokio for async | No |
zonky |
Enables zonky PostgreSQL binaries | No |
This crate uses #![forbid(unsafe_code)]
to ensure everything is implemented in 100% safe Rust.
Licensed under either of
at your option.
Uses PostgreSQL binaries from theseus-rs/postgresql-binaries by default.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.