You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL自定义类型属性数据类型修改问题求助

问题描述

我在PostgreSQL数据库中创建了名为money_with_currency的自定义复合类型,创建语句如下:

CREATE TYPE public.money_with_currency AS (currency_code char(3), amount numeric);

尝试修改其中currency_code的类型从char(3)改为varchar,执行语句:

ALTER TYPE public.money_with_currency ALTER ATTRIBUTE currency_code SET DATA TYPE varchar;

但收到错误提示:

ALTER TYPE public.money_with_currency ALTER ATTRIBUTE currency_code SET DATA TYPE varchar;
** (Postgrex.Error) ERROR 0A000 (feature_not_supported) cannot alter type "money_with_currency" because column "prog_fees.amount" uses it

请问是否存在无需手动迁移所有使用该类型的列的解决方案?

解决方案

可以在ALTER TYPE语句末尾添加CASCADE选项,让PostgreSQL自动递归更新所有依赖该自定义类型的对象(包括使用该类型的表列),无需手动逐个修改:

ALTER TYPE public.money_with_currency ALTER ATTRIBUTE currency_code SET DATA TYPE varchar CASCADE;

说明

  • CASCADE会自动处理所有依赖该类型的对象,包括表中的列、函数、约束等,确保类型修改后所有依赖对象都能适配新的类型定义。
  • 从char(3)转换到varchar是安全的类型变更,不会导致数据丢失,因为varchar完全兼容char(3)的所有取值。

内容的提问来源于stack exchange,提问作者Tam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 07:01:16