批量类型替换
来自 PostgreSQL wiki
跳转到导航跳转到搜索
有时人们希望将所有指定(用户定义)类型的列的类型更改为另一种类型。出于显而易见的原因,通常不应该尝试对内置类型进行这种操作,但对于域、枚举和复合类型,它可能非常有用(尤其是对于在 9.1 之前更改枚举定义)。
借助 动态 DDL 辅助函数 exec()
,我们可以按如下方式进行更改,假设我们希望使用文本转换作为中间步骤将所有类型为“foo”的列更改为“foo2”(这是处理枚举的常用方法)
select exec('alter table ' || t || ' ' || array_to_string(atts,', '))
from (select attrelid::regclass as t,
array_agg('alter ' || quote_ident(attname)
|| ' type foo2 using ' || quote_ident(attname)
|| '::text::foo2') as atts
from pg_attribute
where atttypid = 'foo'::regtype
group by attrelid) s;