# PostgreSQL Archive
[](https://github.com/theseus-rs/postgresql-embedded/actions/workflows/ci.yml)
[](https://docs.rs/postgresql_archive)
[](https://codecov.io/gh/theseus-rs/postgresql-embedded)
[](https://bencher.dev/perf/theseus-rs-postgresql-embedded)
[](https://crates.io/crates/postgresql_archive)
[](https://github.com/theseus-rs/postgresql-embedded/tree/main/postgresql_archive#license)
[](https://semver.org/spec/v2.0.0.html)
A library for downloading and extracting PostgreSQL archives from
[theseus-rs/postgresql-binaries](https://github.com/theseus-rs/postgresql-binaries).
## Examples
### Asynchronous API
```rust
use postgresql_archive::{extract, get_archive, Result, LATEST};
#[tokio::main]
async fn main() -> Result<()> {
let (archive_version, archive) = get_archive(&LATEST).await?;
let out_dir = std::env::temp_dir();
extract(&archive, &out_dir).await
}
```
### Synchronous API
```rust
use postgresql_archive::{Result, LATEST};
use postgresql_archive::blocking::{extract, get_archive};
fn main() -> Result<()> {
let (archive_version, archive) = get_archive(&LATEST)?;
let out_dir = std::env::temp_dir();
extract(&archive, &out_dir)
}
```
## Feature flags
postgresql_archive uses [feature flags] to address compile time and binary size
uses.
The following features are available:
| `blocking` | Enables the blocking API | No |
## Supported platforms
`postgresql_archive` supports all platforms provided by [theseus-rs/postgresql-binaries](https://github.com/theseus-rs/postgresql-binaries).
Currently supported platforms are:
| Linux | aarch64-unknown-linux-gnu |
| Linux | aarch64-unknown-linux-musl |
| Linux | arm-unknown-linux-gnueabi |
| Linux | arm-unknown-linux-gnueabihf |
| Linux | arm-unknown-linux-musleabi |
| Linux | arm-unknown-linux-musleabihf |
| Linux | armv5te-unknown-linux-gnueabi |
| Linux | armv7-unknown-linux-gnueabihf |
| Linux | armv7-unknown-linux-musleabihf |
| Linux | i586-unknown-linux-gnu |
| Linux | i586-unknown-linux-musl |
| Linux | i686-unknown-linux-gnu |
| Linux | i686-unknown-linux-musl |
| Linux | mips64-unknown-linux-gnuabi64 |
| Linux | powerpc64le-unknown-linux-gnu |
| Linux | powerpc64le-unknown-linux-musl |
| Linux | s390x-unknown-linux-gnu |
| Linux | s390x-unknown-linux-musl |
| Linux | x86_64-unknown-linux-gnu |
| Linux | x86_64-unknown-linux-musl |
| MacOS | aarch64-apple-darwin |
| MacOS | x86_64-apple-darwin |
| Windows | x86_64-pc-windows-msvc |
## Safety
This crate uses `#![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).
## Contribution
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.