在更改列类型时如何在两个相似的复合类型之间进行转换?

时间:2017-06-30 19:26:48

标签: database postgresql

我正在尝试将列上的类型从一种复合类型更改为另一种复合类型。两种复合类型之间的唯一区别是前一种复合类型使用了阻止该属性为空的自定义域。运行命令后:

ALTER TABLE contact_address ALTER COLUMN target TYPE nullable_mailing_address USING target::nullable_mailing_address;

我收到错误:

ERROR:  cannot cast type mailing_address to nullable_mailing_address

在两种相似的复合类型之间进行投射的正确方法是什么?谢谢!

1 个答案:

答案 0 :(得分:1)

分解然后将旧类型组合成新类型。如果您刚刚更改了字段类型,例如:

ALTER TABLE contact_address
  ALTER COLUMN target TYPE nullable_mailing_address
  USING ((target).non_changed_field, (target).changed_field::new_type);

如果您添加/删除字段几乎相同。

Example