Re: pg_stats.avg_width

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Maciek Sakrejda <m(dot)sakrejda(at)gmail(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: pg_stats.avg_width
Date: 2023-05-18 01:15:29
Message-ID: 3619249.1684372529@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Maciek Sakrejda <m(dot)sakrejda(at)gmail(dot)com> writes:
> The pg_stats.avg_width field is documented [1] as "Average width in
> bytes of column's entries" but it's not defined exactly what "entries"
> means here with respect to STORAGE (the underlying pg_statistic
> documentation doesn't clarify this either). I thought initially this
> was the "logical" size of the values, but I ran an experiment that
> suggests this interpretation is not right:

Nope. What that's meant to be is the size of value that would be passed
around inside the executor. In this case:

> maciek=# select avg_width from pg_stats where tablename = 'foo' and
> attname = 'a';
> avg_width
> -----------
> 18

what you are getting is the size of the TOAST pointer. That's correct
for the planner's purposes, because it'd be the TOAST pointer not the
detoasted value that would be passed through joins, sorts, hashes, etc.
And we really only care about how much space would be needed for
things like sort temp files.

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tony Xu 2023-05-18 05:27:54 Re: Would PostgreSQL 16 native transparent data encryption support database level encryption?
Previous Message Maciek Sakrejda 2023-05-18 00:52:20 pg_stats.avg_width