我刚从我的数据库中创建了一个pg_dump备份,其大小约为95GB,但是direcory / pgsql / data的大小约为38GB。
我运行真空FULL,转储的大小不会改变。我的postgres安装版本是9.3.4,在CentOS版本6.3服务器上。
与物理尺寸相比,转储的大小非常奇怪,或者我认为这是正常的吗?
提前致谢!
问候。
NEME。
答案 0 :(得分:2)
pg_dump输出的大小和磁盘上Postgres群集(又名'实例')的大小具有非常非常小的相关性。考虑:
这也是VACUUM FULL对备份大小没有影响的原因。
请注意,基于时间点恢复(PITR)的备份与pg_dump备份完全不同。 PITR备份本质上是磁盘上数据的副本。
答案 1 :(得分:0)
Postgres在某些情况下使用名为TOAST的技术压缩其数据:
PostgreSQL使用固定页面大小(通常为8 kB),并且不允许元组跨越多个页面。因此,不可能直接存储非常大的字段值。为了克服这种限制,将大字段值压缩和/或分解成多个物理行。这对用户来说是透明的,对大多数后端代码只有很小的影响。该技术被亲切地称为TOAST(或“切片面包以来最好的东西”)。