我有一个关于对一张非常大的表(近3000万行)使用ALTER TABLE
命令的问题。
其中一个列是varchar(255)
类型,我想将其调整为varchar(40)
类型。
基本上,我想通过运行以下命令来更改我的列:
ALTER TABLE mytable ALTER COLUMN mycolumn TYPE varchar(40);
我的问题不在于进程时间很长,而是在执行ALTER TABLE
命令期间,我的表似乎不再可读。
有没有更聪明的方法?也许可以添加一个新列,将旧列中的值复制到新列,删除旧列,最后重命名新列?
注意:我使用的是PostgreSQL 9.0。
resizing
不会使表格占用更少的空间吗? - A.H.varchar(255)
,它并不会为一个实际长度为40字节的值分配255个字节。它会分配40个字节(加上一些内部开销)。ALTER TABLE
唯一会改变的是该列可以存储的最大字节数,超过此数将出现PG错误。请注意不要改变原文意思,并使翻译通俗易懂。 - A.H.