当我有一个带有
ENUM
列的表格时,我会像这样插入:
UPDATE table SET enum_col = 'enum_value';
这工作正常,但是当显式转换它时,我收到错误:
UPDATE table SET enum_col = 'enum_value'::text;
ERROR: column "enum_col" is of type some_enum_type but expression is of type text
LINE 1: UPDATE table SET enum_col = 'enum_value'::text;
^
HINT: You will need to rewrite or cast the expression.
我理解这个错误,但是我可以使用一些设置,以便 PostgreSQL 无论如何都会接受它吗?
(一些额外的背景知识,我正在使用 Npgsql 更新数据库中的数据,即使我没有将
::text
放入查询中,我确实收到此错误。看起来 Npgsql 在使用参数化时添加了显式值类型查询。)
您可以创建从
text
到枚举类型的强制转换:
CREATE TYPE my_enum AS ENUM ('one', 'two', 'three');
CREATE CAST (text AS my_enum) WITH INOUT AS ASSIGNMENT;
CREATE TABLE mytab (enum_col my_enum);
INSERT INTO mytab VALUES ('one'::text);
INSERT 0 1