Sri*_*thy 6 postgresql alter-table
我正在使用 PostgreSQL 数据库。
我有一个包含数百万行的表。我有一个varchar
大小为 2000的列,我想将其设置为 4000。我运行了该alter table
命令,但它花费了太多时间。
有没有更快的方法来做到这一点?
kgr*_*ttn 12
是的,如果您使用的是 9.1 版,则有一种更快的方法。在PostgreSQL的版本9.1版本说明包括如下:
允许 ALTER TABLE ... SET DATA TYPE 避免在适当情况下重写表(Noah Misch、Robert Haas)
例如,将 varchar 列转换为文本不再需要重写表。但是,增加 varchar 列的长度约束仍然需要重写表。
这方面的进一步改进将在 9.2 版中推出,该版本将于下周发布测试版。但是现在看来,更快的方法是将类型更改为text
,在这种情况下,它可以快速更新系统表,而不会更改堆。
几乎没有什么好的理由使用数据类型character varying (n)
(更不用说更糟糕的了char(n)
)。没有什么比数据类型更好的了text
。varchar
是在计算机系统仍然无法处理可变长度字符串的时候发明的。如今,它只是为了与标准和旧应用程序兼容。使用text
,而不是-或varchar
无长改性剂(其被相同地实现)。
如果您需要强制执行最大长度,请添加如下检查约束:
ALTER TABLE tbl ADD CONSTRAINT tbl_col_len CHECK (length(col) < 4000);
Run Code Online (Sandbox Code Playgroud)
您可以删除并重新创建具有不同最大长度的此约束,而无需重新编写表。
text
在阅读@kgrittn 的回答中的好消息后,首先转换为PostgreSQL 9.1 免费提供。