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

使用sqlx查询PostgreSQL遇uuid特性缺失错误,求解决方法

解决sqlx查询PostgreSQL UUID类型报错的问题

错误核心原因

这个报错有两个关键诱因:

  • sqlx的PostgreSQL驱动默认未启用uuid特性,无法识别并处理数据库中的UUID类型列
  • 代码里用uuid::fmt::Hyphenated作为字段类型,而sqlx无法直接将数据库原生UUID值映射到这种格式化后的类型

具体解决步骤

1. 启用sqlx的uuid特性

修改Cargo.toml里的sqlx依赖配置,添加uuid特性(同时保留项目需要的其他特性,比如postgres、异步运行时):

[dependencies]
sqlx = { version = "0.7", features = ["postgres", "uuid", "runtime-tokio-native-tls"] }
uuid = { version = "1.0", features = ["v4"] }

注:runtime特性根据项目实际使用的异步运行时选择,比如用async-std就替换为runtime-async-std-native-tls

2. 修正结构体字段类型

将User结构体的id字段类型从uuid::fmt::Hyphenated改为Uuid,sqlx会自动完成数据库UUID到Uuid类型的映射:

use sqlx::{Pool, Postgres, FromRow};
use uuid::Uuid;

#[derive(FromRow)]
struct User {
    id: Uuid 
}

// 查询代码无需修改
let result = sqlx::query_as!(User, "SELECT id FROM users")
    .fetch_one(pool)
    .await
    .expect("QUERY FAILED");

// 如果需要连字符格式的字符串输出,后续调用to_hyphenated()即可
println!("User ID: {}", result.id.to_hyphenated());

验证

重新编译运行代码,报错会消失,sqlx可以正常读取users表中的id字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 08:27:37