#postgresql #database-server #embedded-database #server #linux-macos

postgresql_embedded

在Linux、MacOS或Windows上本地安装并运行PostgreSQL数据库。PostgreSQL可以与应用程序捆绑,或按需下载。

43个版本 (15个重大更改)

0.16.2 2024年8月24日
0.15.0 2024年8月1日
0.14.2 2024年7月17日
0.7.3 2024年3月25日

#94 in 数据库接口

Download history 204/week @ 2024-05-04 113/week @ 2024-05-11 674/week @ 2024-05-18 467/week @ 2024-05-25 971/week @ 2024-06-01 617/week @ 2024-06-08 858/week @ 2024-06-15 578/week @ 2024-06-22 593/week @ 2024-06-29 739/week @ 2024-07-06 540/week @ 2024-07-13 576/week @ 2024-07-20 765/week @ 2024-07-27 910/week @ 2024-08-03 907/week @ 2024-08-10 554/week @ 2024-08-17

每月3,178次下载
用于 4 个Crates(直接3个)

(Apache-2.0 OR MIT) AND PostgreSQL

565KB
15K SLoC

PostgreSQL嵌入式

ci Documentation Code Coverage Benchmarks Latest version License Semantic Versioning

在Linux、MacOS或Windows上本地安装并运行PostgreSQL数据库。PostgreSQL可以与应用程序捆绑,或按需下载。

这个库提供了类似于SQLite的嵌入式PostgreSQL体验。这是通过在运行时下载和安装PostgreSQL来实现的。还有一个“捆绑”功能,当启用时,将在编译时下载PostgreSQL安装存档,将其包含在二进制文件中,并在运行时从二进制版本安装。在两种情况下,PostgreSQL将在单独的进程空间中运行。

特性

  • 安装和运行PostgreSQL
  • 在临时端口上运行PostgreSQL
  • 异步和阻塞API
  • 在可执行文件中捆绑PostgreSQL存档
  • 动态版本解析
  • 配置PostgreSQL启动选项的能力
  • 基于URL的配置
  • 选择native-tls与rustls

示例

异步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
}

同步API

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()
}

信息

在构建过程中,当启用“捆绑”功能时,PostgreSQL二进制文件将被下载并包含在生成的二进制文件中。PostgreSQL二进制文件的版本由环境变量POSTGRESQL_VERSION确定。如果未设置环境变量POSTGRESQL_VERSION,则将使用postgresql_archive::LATEST来确定要下载的PostgreSQL二进制文件的版本。

在构建或运行时下载theseus PostgreSQL二进制文件时,可以将环境变量GITHUB_TOKEN设置为GitHub个人访问令牌,以增加下载PostgreSQL二进制文件的速率限制。环境变量GITHUB_TOKEN不是必需的。

在运行时,PostgreSQL二进制文件默认缓存在以下目录中

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

通过使用特定版本的 PostgreSQL 二进制文件(例如 =16.4.0)可以提升性能。首次下载后,PostgreSQL 二进制文件将被缓存并用于后续运行。此外,将不再查询仓库以计算版本匹配。

功能标志

postgresql_embedded 使用功能标志来处理编译时间和二进制文件大小。

以下功能可用

名称 描述 默认值?
bundled 将 PostgreSQL 存档打包到生成的二进制文件中
blocking 启用阻塞 API;需要 tokio
native-tls 启用 native-tls 支持
rustls-tls 启用 rustls-tls 支持
theseus 启用 theseus PostgreSQL 二进制文件
tokio 启用使用 tokio 进行异步操作
zonky 启用 zonky PostgreSQL 二进制文件

安全性

此crate使用#![forbid(unsafe_code)]来确保所有内容都在 100% 安全的 Rust 中实现。

许可

许可协议为以下之一

任选其一。

注释

默认情况下使用 theseus-rs/postgresql-binaries 中的 PostgreSQL 二进制文件。

贡献

除非您明确声明,否则任何有意提交以包含在您的工作中的贡献(根据 Apache-2.0 许可证定义),均将按上述方式双许可,无任何附加条款或条件。

依赖关系

~27–44MB
~738K SLoC