0

好的,这是问题。我有一些我创建的表

创建表数学(id1 bytea,id2 bytea,评论文本[])

还有更多的列,但这无关紧要。创建后,我在其中插入约 500k 行并通过几个查询修改它们,每个查询都包含

array_append(comments, '关于当前计算步骤的一些评论')

毕竟完成后,我得到大约 1.6Gb 的表大小

如果那时我跑

ALTER TABLE 数学 ALTER COLUMN comments TYPE varchar[] USING comments::varchar[];

表大小显着下降,约为 300Mb

为什么会这样?以及如何在不更改列类型的情况下获得类似的结果?

注意:我尝试在创建时将列设置为 varchar[] 类型,但在完成所有查询后,它的大小仍然为 1.6Gb,并且转换为 text[] 再次将其减小到 300Mb。

4

1 回答 1

0

执行ALTER TABLE .. ALTER TYPE ..全表重写,压缩表和索引。

VACUUM FULL tablename;相反,您会得到相同的结果。

textvarchar具有完全相同的存储空间。

于 2017-09-28T13:55:52.797 回答