postgresql 中的表大小和数组文本[]

Tablesize and array text[] in postgresql

好的,问题来了。 我有一些 table 我创建的

create table maths( id1 bytea , id2 bytea , comment text[] )

还有更多的列,但那是微不足道的。创建后,我在那里插入 ~500k 行并通过几个查询修改它们,每个查询都包含

array_append(comments, 'Some comment about current computing step')

完成所有操作后,我得到 table大小约为 1.6Gb

如果那我运行

ALTER TABLE maths ALTER COLUMN comments TYPE varchar[] USING comments::varchar[];

table大小显着下降,约为 ~300Mb

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

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

ALTER TABLE .. ALTER TYPE .. 进行了完整的 table 重写,压缩了 table 和索引。

你会从 VACUUM FULL tablename; 得到相同的结果。

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