获取实际 table 大小而不是吐司

get actual table size not toast

使用 postgres....首先,我说 'toast table size' 是分配给 table 的大小是否正确? 'table size' 是 table.

中数据的实际大小

我创建了一个新的 table,其中还没有数据,它的 table 大小是 0 字节,但它的 toast table 大小是 8192 字节。

我的问题是:

SELECT pg_size_pretty(pg_table_size('zlimitreacjed_1')); 

returns table 的 toast 大小 '8192 bytes' 返回 table 中数据的实际大小的查询是什么?

Postgres 中的 TOAST 数据与存储在主 table 文件之外的值相关,通常是因为它们非常大。就 "the actual size of data in the table" 而言,必须包含 TOAST 数字,因为它们 table.

中的数据

pg_table_size 报告 table 在磁盘上的大小。这与 table 中实时数据的大小完全不同。造成这种情况的原因有很多,包括:

  • Space 来自已删除的行
  • 更新后留下的旧版本行
  • 指针(用于实际数据存储在 toast 文件而不是主文件中的地方)
  • 免费space地图
  • 页header信息
  • 行header信息

有关文件格式的更多详细信息,请查看 http://www.postgresql.org/docs/current/static/storage.html

如果您对实际数据有多大感兴趣,您确实需要 select 每条记录并将这些行中所有 non-null 字段的长度加在一起。

您可以执行 VACUUM FULL,这将清除一些 non-data space(与已删除的行等相关),但存储开销仍然存在。