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

在Rust SQLx中使用Postgres自定义枚举查询时报错如何解决?

解决sqlx查询Postgres自定义枚举类型时的"unsupported type"错误

问题原因

sqlx::query_as!是编译时宏,无法自动推导自定义枚举类型与Postgres枚举的映射关系,必须显式指定列对应的Rust类型,否则会触发"unsupported type"错误。

解决方案

1. 显式标注查询列的类型映射

将SELECT *改为明确列出所有字段,并对role字段添加类型标注,告诉宏该列对应Rust的Role枚举:

let user = match sqlx::query_as!(
    User,
    r#"
    SELECT 
        id, email, username, password, 
        role as "role: Role", 
        created_at, updated_at 
    FROM users 
    WHERE email = $1 AND password = $2
    "#,
    &email,
    &password,
)

2. 刷新sqlx类型元数据

如果上述修改后仍报错,检查sqlx-data.json是否包含自定义枚举的信息:

  • 执行迁移确保数据库结构同步:cargo sqlx migrate run
  • 重新生成类型元数据:cargo sqlx prepare
  • 清理编译缓存并重新检查:cargo clean && cargo check

3. 验证枚举派生属性

确认Role枚举的sqlx::Type派生配置正确:

#[derive(Serialize, Deserialize, Debug, sqlx::Type)]
#[sqlx(type_name = "role", rename_all = "lowercase")] 
pub enum Role {
    ADMIN,
    USER
}
  • type_name必须与Postgres中创建的枚举名称完全一致(Postgres默认小写,此处已匹配)
  • rename_all = "lowercase"确保Rust枚举变体与数据库枚举值(admin/user)对应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 20:05:16