Postgres pg_dump转储文件大小大于pg_database_size



我有一个客户端使用pg_dump进行备份,其大小几乎为700GB,而pg_database_size仅为195GB。我已经运行了VACUUM FULL,但结果仍然相同。

这怎么可能呢?据我所知,由于压缩,转储文件应该更小。

我使用的是PostgreSQL 9.5版本。首先我认为这是一个错误,然后我使用了PostgreSQL 10的二进制文件,但结果也是一样的。

我们使用常规命令备份

pg_dump -U username -d dbname > dbname.sql

可能是什么问题?

pg_dump文件可能小于数据库大小,原因如下:

  1. pg_dump不转储索引块。它只存储索引的定义
  2. 如果你的数据库有船,那么数据库的大小会更大

如果SQL转储比数据库大,则可能有更大的TEXT/JSONB/JSON/BYTEA等数据类型的数据,这些数据类型在PG中被烘焙和压缩。

"据我所知,由于压缩,转储文件应该更小。">

pg_dump命令行显示它是纯格式的,并且没有请求任何压缩。也没有显示通过压缩程序传输的输出。因此没有施加压缩。默认情况下,压缩用于自定义格式,但不用于普通格式。

另一方面,数据库在某些情况下会自动压缩一些数据。这种压缩通常不是很好,但显然在您的情况下,它足够好,总比什么都没有好(以及克服索引使用的额外空间(。实际的数据库还以二进制形式存储数字,这比pg_dump使用的文本形式更紧凑。

最新更新