如何让 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
您需要成为超级用户才能创建类型转换。
当我有一个带有 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
您需要成为超级用户才能创建类型转换。