Hi,

On 2018-12-11 13:43:47 -0500, Tom Lane wrote:
> Andres Freund <and...@anarazel.de> writes:
> > On 2018-12-11 09:47:38 -0500, Tom Lane wrote:
> >> And why do you blame it on this representation?  We don't believe that
> >> relpages is the actual size of the table.
> 
> > No, but we assume that there's 10 pages. Even if both relpages and the
> > actual relation stats say there's not. And we assume there's as many
> > tuples on the page as can fit on it, using get_rel_data_width().  So if
> > you have a small table with a handful of entries at most, you suddenly
> > get estimates of a few hundred to ~a thousand rows.
> 
> That's intentional, and not particularly constrained by the representation
> used in pg_class.  The downsides of incorrectly assuming a table is tiny
> are a lot worse than those of assuming the opposite.

How's being unable to distinguish "never vacuumed" from "table is
knowingly empty right now" not constrained by the representation?  I
mean:
                         * We approximate "never vacuumed" by "has relpages = 
0", which
                         * means this will also fire on genuinely empty 
relations.  Not
                         * great, but fortunately that's a seldom-seen case in 
the real
                         * world, and it shouldn't degrade the quality of the 
plan too
                         * much anyway to err in this direction.
                         *
                         * There are two exceptions wherein we don't apply this 
heuristic.
                         * One is if the table has inheritance children.  
Totally empty
                         * parent tables are quite common, so we should be 
willing to
                         * believe that they are empty.  Also, we don't apply 
the 10-page
                         * minimum to indexes.

My case of small tables of ephemeral data aside, with hash & range
partitioning it's becoming more common to have individual tables be
empty too, by virtue of nothing falling into the range/being hashed of
the partitions.

Without having a separate "no page, but really" value, how can we fix
this?

Greetings,

Andres Freund

Reply via email to