将列类型更改为多个表

时间:2016-02-01 13:44:21

标签: postgresql

在我正在研究的PostgreSQL数据库中,有一半的表有一个特定的列,总是名称相同,类型为varchar(5)。大小变得有点过于限制,我想将其更改为varchar(10)。

在我的特定情况下,表的数量实际上非常易于手动完成。但我想知道如何通过查询更大的dbs来编写脚本。通常应该只需几步即可。

  1. 识别架构中的所有表,然后(?)按条件筛选(如果列存在)。
  2. 为找到的每个表创建ALTER TABLE语句
  3. 我对如何编写标识模式中所有表的查询有所了解。但我不知道如何过滤它们。如果我没有过滤它们,我认为生成的alter table语句会破坏。

    如果有人可以分享他们的知识,那将会很棒。

1 个答案:

答案 0 :(得分:1)

感谢Abelisto提供一些指导。最终,这就是我做到的。

首先,我创建了一个查询,然后创建ALTER TABLE语句。 MyDBMyColumn需要反映实际值。

SELECT 
   'ALTER TABLE '||columns.table_name||' ALTER COLUMN '||MyColumn||' TYPE varchar(20);'
FROM 
   information_schema.columns
WHERE 
  columns.table_catalog = 'MyDB' AND 
  columns.table_schema = 'public' AND 
  columns.column_name = 'MyColumn';

然后,只需将输出作为新查询执行即可。全部完成。