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

使用Actix-Web+sqlx操作PostgreSQL时TIMESTAMPTZ字段报错求助

解决sqlx操作PostgreSQL TIMESTAMPTZ字段的报错问题

问题原因

你遇到的optional feature 'time' required for type TIMESTAMPTZ of column #4 ("created_at")报错,本质是sqlx处理PostgreSQL的时区时间类型时,需要启用对应的可选特性,同时要让sqlx能识别chrono的时间类型。

修复步骤

1. 补全sqlx的依赖特性

打开你的Cargo.toml,给sqlx添加chrono和time两个特性——这俩是sqlx支持chrono时间类型与PostgreSQL TIMESTAMPTZ映射的必要开关。修改后的sqlx依赖如下:

sqlx = {version = "0.6.2", features = ["runtime-async-std-native-tls", "postgres", "uuid", "chrono", "time"]}

2. 确认模型类型匹配

你的FieldModel里created_at和updated_at使用Option<chrono::DateTime<chrono::Utc>>是正确的,完全匹配数据库的TIMESTAMPTZ类型。如果数据库中这两个字段是NOT NULL(你已经设置了默认值),也可以去掉Option直接用chrono::DateTime<chrono::Utc>,不影响功能。

3. 可选:调整query_as!写法(通常无需此步)

如果开启特性后仍有问题,可以尝试在query_as!中显式列出字段(避免SELECT *可能的映射歧义):

let query_result = sqlx::query_as!(
    FieldModel,
    "SELECT id, name, address, published, created_at, updated_at FROM fields",
)
.fetch_all(&data.db)
.await;

验证修复

修改后执行cargo update更新依赖,重新编译运行项目。此时查询接口应该能正常返回包含created_at和updated_at字段的数据,不会再出现特性缺失的报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:00:25