【发布时间】:2010-12-21 18:38:15
【问题描述】:
我需要更改 PostgreSQL v7.4 数据库中表中 CHAR 列的长度。此版本不支持使用 ALTER TABLE 语句直接更改列类型或大小的功能。因此,例如,直接将列从 CHAR(10) 更改为 CHAR(20) 是不可能的(是的,我知道,“使用 varchars”,但在我目前的情况下这不是一个选项)。有人对如何最好地完成此任务有任何建议/技巧吗?我最初的想法:
-- 将表的数据保存在一个新的“保存”表中。 CREATE TABLE save_data AS SELECT * FROM table_to_change;
-- 从要更改的第一列中删除列。 ALTER TABLE table_to_change DROP column_name1; -- 从需要修改的第一列开始的每一列 ALTER TABLE table_to_change DROP column_name2; ...
-- 重新添加列,使用 CHAR 列的新大小 ALTER TABLE table_to_change ADD column_name1 CHAR(new_size); -- 对于上面删除的每一列 ALTER TABLE table_to_change ADD column_name2...
-- 从“保存”表中复制数据 更新 table_to_change SET column_name1=save_data.column_name1, -- 对于上面删除/读取的每一列 column_name2=save_date.column_name2, ... FROM 保存数据 WHERE table_to_change.primary_key=save_data.primay_key;
呸!希望有更好的方法吗?任何建议表示赞赏。谢谢!
【问题讨论】: