Postgresql – 更改varchar列的大小
我有一个关于ALTER TABLE命令在一个真正的大表(几乎3000万行)的问题。
它的一个列是varchar(255),我想调整为varchar(40)。 基本上,我想通过运行以下命令更改我的列: ALTER TABLE mytable ALTER COLUMN mycolumn TYPE varchar(40); 我没有问题,如果进程很长,但似乎我的表在ALTER TABLE命令中不再可读。 任何线索将非常感谢! 注意:我使用PostgreSQL 9.0。
有一个如何做到这一点的描述在
Resize a column in a PostgreSQL table without changing data.你必须破解数据库目录数据。唯一的方法是使用ALTER TABLE,并且你已经注意到,更改将在整个表运行时锁定和重写整个表。
请务必在更改此文档之前阅读文档的Character Types部分。各种奇怪的情况都要在这里注意。当值存储到行中时,将进行长度检查。如果你在那里有一个下限,这不会减少现有的值的大小。在进行更改后,对整个表执行扫描,查找字段长度大于40个字符的行,这样做是明智的。你需要找出如何手动截断这些,所以你回到一些锁只是在超大的 – 因为如果有人试图更新任何东西在那行,它会拒绝它太大现在,在点它去存储新版本的行。随之而来的是用户的欢笑。 VARCHAR是一种可怕的类型,它存在于PostgreSQL中,只是为了符合其相关的可怕的SQL标准部分。如果您不关心多数据库兼容性,请考虑将您的数据存储为TEXT,并添加约束以限制其长度。约束你可以改变没有这个表锁/重写问题,他们可以做更多的完整性检查,而不仅仅是弱长度检查。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |