You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Diesel操作PostgreSQL时,IpNetwork类型因未实现diesel::Expression trait导致编译错误的解决求助

Diesel操作PostgreSQL时,IpNetwork类型因未实现diesel::Expression trait导致编译错误的解决求助

大家好,我在使用Diesel框架配合PostgreSQL开发时遇到了一个类型适配的编译错误,折腾了半天没找到解决办法,想请教下社区的朋友们该怎么处理。

先跟大家梳理下我的操作流程和相关代码:

1. 创建PostgreSQL数据表

我在PostgreSQL中创建了一张net_test表,结构如下:

CREATE TABLE public.net_test (
    net inet NOT NULL,
    id int8 NOT NULL,
    CONSTRAINT net_pk PRIMARY KEY (id)
);

2. 定义Diesel数据模型

参考Diesel文档的指引,我选用ipnetwork库的IpNetwork类型来对应数据库的inet字段,模型代码如下:

use std::fmt::Display;

use serde::Serialize;
use serde::Deserialize;
use crate::model::diesel::dolphin::dolphin_schema::*;
use bigdecimal::BigDecimal;
use chrono::DateTime;
use chrono::offset::Utc;
use ipnetwork::IpNetwork;

#[derive(Insertable,Queryable,QueryableByName,Debug,Serialize,Deserialize,Default,Clone)]
#[diesel(table_name = net_test)]
pub struct NetTest {
    pub net: IpNetwork,
    pub id: i64,
}

3. Schema文件配置

对应的Diesel schema文件内容:

table! {
    net_test (id) {
        net -> Inet,
        id -> Int8,
    }
}

4. 编译时的错误信息

当我编译项目时,控制台抛出了如下错误:

the trait `diesel::Expression` is not implemented for `IpNetwork`, which is required by `&'insert IpNetwork: AsExpression<diesel::sql_types::Inet>`

5. Diesel依赖配置

我的Cargo.toml中Diesel的依赖配置如下:

diesel = { version = "2.2.1", features = [
    "postgres",
    "64-column-tables",
    "chrono",
    "serde_json",
    "numeric",
    "ipnet-address"
] }

我本来以为启用ipnet-address特性就能让IpNetwork和Diesel的Inet类型自动适配,但显然还缺少必要的实现。有没有朋友知道该怎么解决这个编译错误呀?


备注:内容来源于stack exchange,提问作者Dolphin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 09:10:30