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

Rust Diesel编译报错:DateTime<Utc>未实现FromSql<Timestamptz, Pg>

解决Diesel中DateTime与Timestamptz的FromSql trait未实现问题

核心原因

Diesel对chrono::DateTime<Utc>与PostgreSQL timestamptz类型的映射支持默认未启用,需要通过Cargo特性开关显式开启;版本不匹配也可能引发该问题。

解决方案

1. 开启Diesel的chrono特性

在项目Cargo.toml中,为Diesel依赖添加chrono特性,同时保证chrono版本与Diesel兼容(Diesel 2.x适配chrono 0.4):

[dependencies]
diesel = { version = "2.0", features = ["postgres", "chrono"] }
chrono = "0.4"

若需使用其他功能(如连接池r2d2),可直接追加到features列表中。

2. 确认导入必要的trait

尽管diesel::prelude::*通常包含所需trait,若问题仍存在,可显式导入Diesel为chrono提供的扩展trait:

use diesel::prelude::*;
use chrono::{DateTime, Utc};
// 显式导入以确保映射逻辑生效
use diesel::chrono::*;
use crate::schema::offers::offers as offerTable;

#[derive(Queryable, Selectable)]
#[diesel(table_name = offerTable)]
#[diesel(check_for_backend(diesel::pg::Pg))]
pub struct Offer {
    pub id: i32,
    pub enddate: Option<DateTime<Utc>>,
    pub createdAt: Option<DateTime<Utc>>,
    pub createdby: Option<String>,
    pub frequency: Option<i32>,
    pub offername: String,
    pub startdate: Option<DateTime<Utc>>
}

3. 验证schema类型定义

确认schema中Timestamptz类型正确对应PostgreSQL的timestamptz字段。你的schema定义无问题,若为自动生成的schema,可重新运行diesel print-schema校验类型匹配性。

4. 清理缓存后重新构建

缓存可能导致特性未正确生效,执行以下命令清理后重新构建:

cargo clean
cargo build

内容的提问来源于stack exchange,提问作者Prophet_Of_Spoof

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:22:20