【发布时间】:2017-05-09 09:06:23
【问题描述】:
我的表中有一个枚举类型列。我现在决定将其设为 varchar 类型并设置一些约束。
Q1)这是一个好习惯:有枚举或在列上放置约束。
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)
);
【问题讨论】:
-
它对我有用。你能用
CREATE TYPE和CREATE TABLE语句扩展问题以便我重现问题吗? -
如果您尝试:
ALTER TABLE tablename ALTER COLUMN columnname TYPE VARCHAR USING columnname::text会发生什么?该消息表明它无法将您的枚举(从技术上讲是一种类型)转换为varchar,可能是因为枚举不是简单类型。您可能有一些成功的类型转换为文本。来自postgresql.org/docs/current/static/sql-altertable.html:“如果没有从旧类型到新类型的隐式或赋值强制转换,则必须提供 USING 子句”。 -
@manngo 运算符不存在:字符变化 = table_enum:这是我在运行您建议的命令时遇到的错误。 table_enum 是我的表的枚举字段。
-
@LaurenzAlbe 这就是我创建表的方式:CREATE TABLE 表名(id1 TEXT NOT NULL,id2 VARCHAR(100) NOT NULL,enum_field table_enum,modified_on TIMESTAMP NOT NULL DEFAULT NOW(),modified_by VARCHAR( 100), 主键 (id1, id2) );
-
@SouravPrem 你也可以发布
table_enum的定义吗?
标签: postgresql enums