PostgreSQL错误:运算符不存在:enum12 =整数

时间:2016-07-11 10:02:26

标签: java postgresql jdbc

执行简单查询时出现运算符不匹配错误。是什么原因造成的?

我正在使用JDBC preStmt.setInt(1, Integer.parseInt(user));

 dev_db=# \d+ registrants
                                  Table "public.registrants"
        Column    |           Type           |     Modifiers      | Storage  | Description
    --------------+--------------------------+--------------------+----------+-------------
     user         | enum12                   | not null           | plain    |
     degree       | text                     |                    | extended |

1 个答案:

答案 0 :(得分:0)

我假设enum12是使用CREATE TYPE enum12 AS ENUM (...)创建的。

问题是你无法自动将整数转换为枚举数据类型(但它适用于字符串)。

如果确实需要能够将整数转换为enum12,则可以使用以下内容:

CREATE OR REPLACE FUNCTION int_to_enum12(integer) RETURNS enum12
   LANGUAGE sql IMMUTABLE STRICT AS
   $$SELECT enumlabel::enum12
     FROM pg_catalog.pg_enum
     WHERE enumsortorder = $1
       AND enumtypid = 'enum12'::regtype$$;

CREATE CAST (integer AS enum12)
   WITH FUNCTION int_to_enum12(integer)
   AS IMPLICIT;

然后你的例子可能会有用。

备注:

  • 这假设第一个标签对应于'1'。
  • 超出范围的整数将转换为NULL
  • 向数据库中添加隐式强制转换将增加SQL语句的歧义,从而导致更多错误,如:

    ERROR: operator is not unique: ...
    HINT: Could not choose a best candidate operator. You might need to add explicit type casts.
    

我认为你最好不要改写查询,这样你就不需要进行类型转换。