0
我的表中有一个枚举类型列。我现在已经决定把它变成一个varchar类型并且加上了一些限制。 Q1)这是一个很好的做法:在列上添加或放置constarint。 Q2)如何将我的枚举类型列更改为varchar。与此问题相反question。 我尝试使用这样的:在postgresql中将枚举类型列升级到varchar
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',会发生什么?该消息表明它不能将你的enum(技术上是一个类型)转换为'varchar',大概是因为枚举不是一个简单的类型。您可能会将某些成功类型转换为文字。从https://www.postgresql.org/docs/current/static/sql-altertable.html:“如果没有隐式或从旧类型转换为新类型,则必须提供USING子句”。 – Manngo
@manngo操作符不存在:character varying = table_enum:这是我运行建议命令时得到的错误。 table_enum是我的表的枚举字段。 –