如何让 PostgreSQL 接受文本作为枚举值

How to let PostgreSQL accept text as enum value

当我有一个带有 ENUM 列的 table 时,我这样插入:

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

您需要成为超级用户才能创建类型转换。