为什么我不能将列从一个枚举转换为另一个?
Why can't I convert a column from one enum to another?
鉴于此设置
create type myenum_one as enum('foo', 'bar', 'baz');
create table mytable (
myvalue myenum_one
);
alter table mytable
add constraint mycheckconstraint check (myvalue != 'bar');
insert into mytable values ('foo');
create type myenum_two as enum('foo', 'bar');
然后在尝试更改列类型时失败
alter table mytable
alter column myvalue type myenum_two using myvalue::text::myenum_two;
有错误
ERROR: operator does not exist: enum_two <> enum_one
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
您需要在更改列类型之前删除检查约束,并在之后重新创建它(如果它仍然相关),就像这样
alter table mytable
drop constraint mycheckconstraint;
alter table mytable
alter column myvalue type myenum_two using myvalue::text::myenum_two;
alter table mytable
add constraint mycheckconstraint check (myvalue != 'bar');
鉴于此设置
create type myenum_one as enum('foo', 'bar', 'baz');
create table mytable (
myvalue myenum_one
);
alter table mytable
add constraint mycheckconstraint check (myvalue != 'bar');
insert into mytable values ('foo');
create type myenum_two as enum('foo', 'bar');
然后在尝试更改列类型时失败
alter table mytable
alter column myvalue type myenum_two using myvalue::text::myenum_two;
有错误
ERROR: operator does not exist: enum_two <> enum_one
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
您需要在更改列类型之前删除检查约束,并在之后重新创建它(如果它仍然相关),就像这样
alter table mytable
drop constraint mycheckconstraint;
alter table mytable
alter column myvalue type myenum_two using myvalue::text::myenum_two;
alter table mytable
add constraint mycheckconstraint check (myvalue != 'bar');