From 71f996d22125eb6cfdbee6094f44370aa8dec610 Mon Sep 17 00:00:00 2001
From: Andrew Dunstan <andrew@dunslane.net>
Date: Tue, 27 Dec 2016 11:23:46 -0500
Subject: [PATCH] Explain unaccounted for space in pgstattuple.

In addition to space accounted for by tuple_len, dead_tuple_len and
free_space, the table_len includes page overhead, the item pointers
table and padding bytes.

Backpatch to live branches.
---
 doc/src/sgml/pgstattuple.sgml | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/doc/src/sgml/pgstattuple.sgml b/doc/src/sgml/pgstattuple.sgml
index 9ada5d209af..d2fa524d6ec 100644
--- a/doc/src/sgml/pgstattuple.sgml
+++ b/doc/src/sgml/pgstattuple.sgml
@@ -117,6 +117,16 @@ free_percent       | 1.95
      </tgroup>
     </table>
 
+    <note>
+      <para>
+        The <literal>table_len</literal> will always be greater than the sum
+        of the <literal>tuple_len</literal>, <literal>dead_tuple_len</literal>
+        and <literal>free_space</literal>. The difference is accounted for by
+        fixed page overhead, the per-page table of pointers to tuples, and
+        padding to ensure that tuples are correctly aligned. 
+      </para>
+    </note>
+
     <para>
      <function>pgstattuple</function> acquires only a read lock on the
      relation. So the results do not reflect an instantaneous snapshot;
-- 
GitLab