微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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,并添加约束以限制其长度。约束你可以改变没有这个表锁/重写问题,他们可以做更多的完整性检查,而不仅仅是弱长度检查。

原文地址:https://www.jb51.cc/postgresql/193803.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐