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

如何在sqlx中重命名枚举值适配PostgreSQL的CHAR字段?

解决方案

你的需求完全可以实现,报错原因是sqlx默认会将带有#[derive(sqlx::Type)]的Rust枚举识别为PostgreSQL的自定义枚举类型(即需要提前用CREATE TYPE创建的枚举),但你的chats.type字段是普通的CHAR(1)类型,数据库中不存在名为chattype的自定义枚举,因此触发错误。

只需在枚举上添加#[sqlx(type_name = "char")]属性,明确告诉sqlx将该枚举映射到PostgreSQL的CHAR类型,而非自定义枚举,同时保留每个变体的rename属性即可:

#[derive(sqlx::Type, Debug, Serialize, Deserialize)]
#[sqlx(type_name = "char")] // 指定数据库字段类型为CHAR
pub enum ChatType {
    #[sqlx(rename="p")]
    Personal, 
    #[sqlx(rename="g")]
    Group,
    #[sqlx(rename="b")]
    Broadcast,
    #[sqlx(rename="s")]
    Service,
}

说明

  • #[sqlx(type_name = "char")]:强制sqlx将枚举序列/反序列化为PostgreSQL的字符类型,而非尝试使用自定义枚举类型
  • 每个变体的#[sqlx(rename)]:确保枚举变体与数据库中存储的单个字符一一对应
  • 配置完成后,你可以在代码中直接使用ChatType::Personal这类语义化名称,sqlx会自动处理与CHAR(1)字段的转换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:01:05