在postgresql中将枚举类型列升级为varchar

时间:2017-05-09 09:06:24

标签: postgresql enums

我的表中有一个枚举类型列。我现在决定把它变成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)
); 

2 个答案:

答案 0 :(得分:2)

就最佳做法而言,最好定义一个单独的可能值表,并使列成为此表的外键。这有以下好处:

  • 新表不仅可以将特定键作为类型,还可以包含其他列,其中包含友好名称,类型含义或更多信息等详细信息
  • 更改可能的值是操纵记录(INSERTUPDATEDELETE),这比更改约束或枚举值更易于访问和管理。

答案 1 :(得分:1)

供将来参考:我在改变枚举类型方面遇到了类似的问题,我得到了与上面相同的错误消息。就我而言,问题是由于引用了一个使用该枚举类型的列的部分索引引起的。