【发布时间】:2011-12-05 11:16:12
【问题描述】:
我对一个非常大的表(近 3000 万行)上的 ALTER TABLE 命令有疑问。
其中一列是varchar(255),我想将其调整为varchar(40)。
基本上,我想通过运行以下命令来更改我的列:
ALTER TABLE mytable ALTER COLUMN mycolumn TYPE varchar(40);
如果进程很长,我没有问题,但在ALTER TABLE 命令期间,我的表似乎不再可读。
有没有更聪明的方法?也许添加一个新列,从旧列复制值,删除旧列,最后重命名新列?
注意:我使用的是 PostgreSQL 9.0。
【问题讨论】:
-
明确一点:你知道,
resizing不会让表格占用更少的空间吗? -
即使在我的情况下?我的意思是该列的最大大小为 40 个字符(所以八位字节)而不是 255 个?
-
如果你对 PostgreSQL 说
varchar(255),那么它将不为实际长度为 40 字节的值分配 255 字节。它将分配 40 个字节(加上一些内部开销)。唯一会be changed by theALTER TABLE` 的是您可以在该列中存储的最大字节数,而不会从 PG 收到错误。 -
关于开销 A.H. 提到:What is the overhead for varchar(n)?
-
在此处查看答案以获取更新dba.stackexchange.com/questions/189890/…
标签: sql postgresql varchar alter-table