我ALTER TABLE
对一个非常大的表(近3000万行)上的命令有疑问。它的一列是a varchar(255)
,我想将其调整为a varchar(40)
。基本上,我想通过运行以下命令来更改列:
ALTER TABLE mytable ALTER COLUMN mycolumn TYPE varchar(40);
如果过程很长,我没有问题,但是在ALTER TABLE命令期间似乎我的表不再可读。有没有更聪明的方法?也许添加一个新列,从旧列中复制值,删除旧列,最后重命名新列?
任何线索将不胜感激!提前致谢,
注意:我使用PostgreSQL 9.0。
varchar(255)
对PostgreSQL 说的话,它将不会为实际长度为40个字节的值分配255个字节。它将分配40个字节(加上一些内部开销)。be changed by the
ALTER TABLE` 唯一会改变的是您可以在该列中存储的最大字节数,而不会导致PG出错。
resizing
吗,这不会使表占用更少的空间吗?