在rust-diesel中处理Jsonb postgresql列

ewm0tg9j  于 5个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(72)

我有一个包含Jsonb列的表

diesel::table! {
    user (id) {
        id -> Uuid,
        data -> Jsonb,
        ...
    }
}

字符串
我创建了一个类似于这样的结构:

use crate::schema::user;
use diesel::prelude::*;
use serde::{Deserialize, Serialize};
use uuid::Uuid;

#[derive(Serialize, Deserialize, Queryable, Insertable)]
#[table_name = "user"]
pub struct User {
    pub id: Uuid,
    pub data: serde_json::Value,
    ...

}

...


这段代码抱怨数据字段有一些问题

pub data: serde_json::Value
    ^^^^ the trait `diesel::Expression` is not implemented for `Value`


我是rust和diesel的新手,我不知道如何实现。我以为serde_json是我所需要的,但我猜还缺少一些东西。
这些是我在Cargo.toml中的版本

actix-web = "4.4.0"
actix-rt = "2.9.0"
chrono = { version = "0.4.31", features = ["serde"] }
diesel = { version = "2.1.4", features = ["postgres","r2d2", "uuid", "chrono"] }
diesel_migrations = "2.1.0"
dotenv = "0.15.0"
env_logger = "0.10.1"
lazy_static = "1.4.0"
listenfd = "1.0.1"
log = "0.4.20"
r2d2 = "0.8.10"
rand = "0.8.5"
rust-argon2 = "2.0.0"
serde = { version = "1.0.193", features = ["derive"] }
serde_json = "1.0.108"
uuid = { version = "1.6.1", features = ["serde", "v4"] }

uz75evzq

uz75evzq1#

您未在Cargo.toml中启用serde_jsonextra功能:

diesel = { version = "2.1.4", features = ["postgres","serde_json","r2d2","uuid","chrono"] }

字符串
这个特性标志添加了必要的trait实现。

pub struct User {
    pub id: Uuid,
    pub data: serde_json::Value,
    ...

}

相关问题