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来查找给定样本输入的表有多大.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。