#diesel #postgresql #hstore

diesel_pg_hstore

Postgres Hstore 对 Diesel 的支持

2 个不稳定版本

使用旧的 Rust 2015

0.2.0 2017年12月12日
0.1.0 2017年12月12日

#2683 in 数据库接口

MIT/Apache

19KB
273

Postgres Hstore for Diesel

此 crate 为 Diesel 和 Postgres 提供了 Hstore 类型。

目前仅支持将数据序列化和反序列化为 hstore 列。如果有人有兴趣构建对 Postgres hstore 查询语法 的支持,将非常感谢!

使用方法

有关更多详细信息,请参阅 文档

将 diesel_pg_hstore 添加到您的 Cargo.toml

[dependencies]
diesel_pg_hstore = "*"

将 crate 添加到您的项目。 (例如,从您的 lib.rs 文件)

extern diesel_pg_hstore;

使用 Diesel 的 Hstore 类型

该类型必须存在于您模式定义的 table! 定义中。目前没有简单的方法可以提供这一点,除非您手动将其添加到每个需要该类型的 table!

一旦 Diesel 1.0 版本退出测试阶段,Diesel 将提供 diesel print-schema 命令和 infer_schema! 宏将外部类型引入作用域的能力。目前,我建议不要使用 infer_schema! 宏。

如果您正在使用 diesel print-schema 命令来重新生成您的模式,您可以考虑创建一个包含所需 use diesel_pg_hstore::Hstore; 语句的 .patch 文件,以将 Hstore 类型引入作用域。

使用 Hstore

#[macro_use] extern crate diesel;
extern crate diesel_pg_hstore;

use std::collections::HashMap;
use diesel::prelude::*;
use diesel_pg_hstore::Hstore;

table! {
    use diesel::types::*;
    use diesel_pg_hstore::Hstore;

    user_profile {
        id -> Integer,
        settings -> Hstore,
    }
}

#[derive(Insertable, Debug, PartialEq)]
#[table_name="user_profile"]
struct NewUserProfile {
    settings: Hstore,
}

fn main() {
    let mut settings = HashMap::new();
    settings.insert("Hello".to_string(), "World".to_string());

    let profile = NewUserProfile { settings: Hstore::from_hashmap(settings) };
}

为了方便起见,Hstore 类型还提供了对标准 HashMap 函数的代理方法。

许可证

diesel_pg_hstore 许可证为以下之一

贡献

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

有关更多信息,请参阅 贡献 文件。

依赖

~4MB
~91K SLoC