\d+ not showing TOAST table size?

Started by Jon Nelsonover 14 years ago4 messagesgeneral
Jump to latest
#1Jon Nelson
jnelson+pgsql@jamponi.net

I have a table with a fair bit of TOAST data in it.
I noticed that \d+ does /not/ include that information (but
pg_total_relation_size does).
Is that intentional? It seems a bit misleading, insofar as "\d+" feels
like it is meant to be a rough indication of the table size, but if
90% of the data is in TOAST then the *real* data stored is much more
than displayed.

--
Jon

#2Josh Kupershmidt
schmiddy@gmail.com
In reply to: Jon Nelson (#1)
Re: \d+ not showing TOAST table size?

On Tue, Sep 20, 2011 at 1:26 PM, Jon Nelson <jnelson+pgsql@jamponi.net> wrote:

I have a table with a fair bit of TOAST data in it.
I noticed that \d+ does /not/ include that information (but
pg_total_relation_size does).

I assume by "\d+" you meant "\dt+" (\d+ doesn't show sizes at all). On
version 9.0 and up, \dt+ uses pg_relation_size() internally, which
actually does include TOAST data as this comment in dbsize.c explains:

* Calculate total on-disk size of a given table,
* including FSM and VM, plus TOAST table if any.
* Indexes other than the TOAST table's index are not included.

The extra space displayed by pg_total_relation_size() is from indexes
on the table.

Is that intentional? It seems a bit misleading, insofar as "\d+" feels
like it is meant to be a rough indication of the table size, but if
90% of the data is in TOAST then the *real* data stored is much more
than displayed.

FYI, the implementation was agreed upon here:
http://archives.postgresql.org/pgsql-hackers/2011-03/msg01268.php

There were some ideas tossed around in that thread about ways to also
include index size as well, which I do think would be nice to have. It
would be a challenge to format that information nicely, particularly
without messing up the tabular output of different types of relations
(e.g. "\dts+").

Josh

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Jon Nelson (#1)
Re: \d+ not showing TOAST table size?

Jon Nelson <jnelson+pgsql@jamponi.net> writes:

I have a table with a fair bit of TOAST data in it.
I noticed that \d+ does /not/ include that information (but
pg_total_relation_size does).
Is that intentional?

This is changed as of (IIRC) 9.1.

regards, tom lane

#4Jon Nelson
jnelson+pgsql@jamponi.net
In reply to: Josh Kupershmidt (#2)
Re: \d+ not showing TOAST table size?

On Tue, Sep 20, 2011 at 2:09 PM, Josh Kupershmidt <schmiddy@gmail.com> wrote:

On Tue, Sep 20, 2011 at 1:26 PM, Jon Nelson <jnelson+pgsql@jamponi.net> wrote:

I have a table with a fair bit of TOAST data in it.
I noticed that \d+ does /not/ include that information (but
pg_total_relation_size does).

I assume by "\d+" you meant "\dt+" (\d+ doesn't show sizes at all). On
version 9.0 and up, \dt+ uses pg_relation_size() internally, which
actually does include TOAST data as this comment in dbsize.c explains:

I meant "\d+". I'm using 9.0.3 and "\d+" clearly shows sizes.
Per Tom Lane's comments later in the thread, the behavior of 9.0 (and
prior) matches my recollection. I just need to wait for 9.1.

Thanks!

--
Jon