我的表中有一个枚举类型列。我现在决定把它变成varchar类型并加上一些约束。
Q1)这是一个很好的做法:拥有枚举或将constarint放在列上。
Q2)如何将我的枚举类型列更改为varchar。与此问题question正好相反。 我试过用这个:
ALTER TABLE tablename ALTER COLUMN columnname TYPE VARCHAR
但是这给了我错误:No operator matches the given name and argument type(s). You might need to add explicit type casts.
这是表格定义:
CREATE TABLE tablename (
id1 TEXT NOT NULL,
id2 VARCHAR(100) NOT NULL,
enum_field table_enum,
modified_on TIMESTAMP NOT NULL DEFAULT NOW(),
modified_by VARCHAR(100),
PRIMARY key (id1, id2)
);
答案 0 :(得分:2)
就最佳做法而言,最好定义一个单独的可能值表,并使列成为此表的外键。这有以下好处:
INSERT
,UPDATE
或DELETE
),这比更改约束或枚举值更易于访问和管理。答案 1 :(得分:1)
供将来参考:我在改变枚举类型方面遇到了类似的问题,我得到了与上面相同的错误消息。就我而言,问题是由于引用了一个使用该枚举类型的列的部分索引引起的。