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;
得到相同的结果。
text
和 varchar
具有完全相同的存储空间。
好的,问题来了。 我有一些 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;
得到相同的结果。
text
和 varchar
具有完全相同的存储空间。