加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么我的PostgreSQL表比它来自的csv更大(以GB为单位)?

发布时间:2020-12-13 16:06:19 所属栏目:百科 来源:网络整理
导读:A 4 GB csv成为我的AWS Postgres实例中的7.7 GB表.一个14 GB的csv不会加载到22 GB的空间,我猜是因为它的大小也会增加一倍!这个因素是两个正常吗?如果是这样,为什么,它是否可靠? 解决方法 有许多可能的原因: 索引占用空间.如果你有很多索引,特别是多列索
A< 4 GB csv成为我的AWS Postgres实例中的7.7 GB表.一个14 GB的csv不会加载到22 GB的空间,我猜是因为它的大小也会增加一倍!这个因素是两个正常吗?如果是这样,为什么,它是否可靠?

解决方法

有许多可能的原因:

>索引占用空间.如果你有很多索引,特别是多列索引或GiST / GIN索引,它们可能是一个很大的空间.
>某些数据类型在文本形式中比在表格中更紧凑.例如,1在csv中消耗1个字节(如果计算逗号分隔符,则为2),但如果将其存储在bigint列中,则需要8个字节.
>如果设置了FILLFACTOR,PostgreSQL会故意浪费空间,以便以后更快地进行UPDATE和INSERT.如果您不知道FILLFACTOR是什么,那么就没有一套.
> PostgreSQL的每行开销比CSV大得多.在CSV中,换行和回车的每行开销为2个字节. PostgreSQL表中的行需要24到28个字节,加上数据值,主要是因为多版本并发控制所需的元数据.因此,具有很多窄行的CSV将产生比具有更少宽行的相同大小(字节)更大的表.
> PostgreSQL可以使用TOAST进行外部存储和值压缩.这可以使数据库中的大文本字符串比CSV中的大文本字符串小得多.

您可以使用octet_size和pg_column_size来让PostgreSQL告诉您行的大小.由于TOAST外部压缩存储,对于由VALUES表达式生成的元组与从表中选择的元组,pg_column_size可能不同.

您还可以使用pg_total_relation_size来查找给定样本输入的表有多大.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读