PostgreSQL 枚举类型使用及ERROR: operator does not exist错误处理

//删除枚举类
DROP TYPE IF EXISTS USER_ROLE CASCADE;
//创建枚举类
CREATE TYPE USER_ROLE AS ENUM ('MALE', 'FEMALE');
//添加转换规则
CREATE CAST (VARCHAR AS USER_ROLE) WITH INOUT AS IMPLICIT;
//如果存在先删除表
DROP TABLE IF EXISTS sys_user;
//创建表,添加枚举类型字段
create table sys_user
(
    row_id      bigserial          not null
        constraint sys_user_pkey primary key,
    create_time timestamp(6),
    update_time timestamp(6),
    del_flag    smallint default 0 not null,
    role        USER_ROLE  default 'MALE'::USER_ROLE    not null,
    user_name   varchar(200)       not null
);
// 添加新的枚举值 [参考文档](https://www.postgresql.org/docs/9.1/sql-altertype.html)
ALTER TYPE USER_ROLE ADD VALUE 'RENYAO';

参考文档
在这里插入图片描述

  • 因为添加了转换规则,所以在pgadmin中可以直接使用varchar类型的字符串作为判断条件查询,但是使用mybatis查询数据库会报错operator does not exist
select * from sys_user where del_flag = 0 and role = 'MALE'
  • 解决方法:将varchar类型转成枚举类型再做比较
方式一
select * from sys_user where del_flag = 0 and role = cast(#{role} as user_role);
方式二
select * from sys_user where del_flag = 0 and role = #{role}::user_role;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值