如何将jsonb数据模型迁移至Diesel 2.x版本?
在Diesel 2.x中定义JSONB映射类型的正确方式
Diesel 2.x重构了内部模块结构,原diesel::pg::types::sql_types模块已设为私有,因此需要调整JSONB类型的导入方式和自定义类型的派生写法,具体如下:
步骤1:调整导入路径
将原导入的diesel::pg::types::sql_types::Jsonb替换为顶层的diesel::sql_types::Jsonb,这是2.x版本中SQL类型的标准导入路径。
步骤2:更新派生宏属性
原#[sql_type = "Jsonb"]属性需要替换为#[diesel(sql_type = Jsonb)],这是Diesel 2.x中自定义类型映射数据库列的要求。
完整代码示例
use diesel::sql_types::Jsonb; use diesel::{FromSqlRow, AsExpression}; #[derive(FromSqlRow, AsExpression, serde::Serialize, serde::Deserialize, Debug, Default)] #[diesel(sql_type = Jsonb)] pub struct ChannelTag { pub id: i32, pub name: String, }
必要的Cargo特性配置
确保Cargo.toml中Diesel依赖启用了postgres、jsonb和serde_json特性,以支持PostgreSQL的JSONB类型及Serde序列化:
diesel = { version = "2.0.4", features = ["postgres", "jsonb", "serde_json"] }
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

