使用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
相关产品推荐
相关产品推荐

