批量类型替换

来自 PostgreSQL wiki
跳转到导航跳转到搜索

管理片段

批量类型替换

适用于 PostgreSQL

>=8.4

编写语言

SQL

依赖于


有时人们希望将所有指定(用户定义)类型的列的类型更改为另一种类型。出于显而易见的原因,通常不应该尝试对内置类型进行这种操作,但对于域、枚举和复合类型,它可能非常有用(尤其是对于在 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;