1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
//! # postgresql_embedded
//!
//! [](https://codecov.io/gh/theseus-rs/postgresql-embedded)
//! [](https://bencher.dev/perf/theseus-rs-postgresql-embedded)
//! [](https://github.com/theseus-rs/postgresql-embedded/tree/main/postgresql_embedded#license)
//! [](https://semver.org/spec/v2.0.0.html)
//!
//! 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](#examples)
//! - [Information](#information)
//! - [Feature flags](#feature-flags)
//! - [Safety](#safety)
//! - [License](#license)
//! - [Notes](#notes)
//!
//! ## Examples
//!
//! ### Asynchronous API
//!
//! ```no_run
//! 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
//! ```no_run
//! #[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 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`
//!
//! ## Feature flags
//!
//! 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 |
//! | `tokio` | Enables using tokio for async | No |
//!
//! ## Safety
//!
//! These crates use `#![forbid(unsafe_code)]` to ensure everything is implemented in 100% safe Rust.
//!
//! ## License
//!
//! Licensed under either of
//!
//! * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or <https://www.apache.org/licenses/LICENSE-2.0>)
//! * MIT license ([LICENSE-MIT](LICENSE-MIT) or <https://opensource.org/licenses/MIT>)
//!
//! at your option.
//!
//! PostgreSQL is covered under [The PostgreSQL License](https://opensource.org/licenses/postgresql).
//!
//! ## Notes
//!
//! Uses PostgreSQL binaries from [theseus-rs/postgresql-binaries](https://github.com/theseus-rs/postgresql-binaries).
#![forbid(unsafe_code)]
#![allow(dead_code)]
#[cfg(feature = "blocking")]
pub mod blocking;
mod command;
mod error;
mod postgresql;
mod settings;
pub use error::{Error, Result};
pub use postgresql::{PostgreSQL, Status};
pub use settings::Settings;