Re: Dead code in toast_fetch_datum_slice?

From: Paul Ramsey <pramsey(at)cleverelephant(dot)ca>
To: Stephen Frost <sfrost(at)snowman(dot)net>
Cc: pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: Dead code in toast_fetch_datum_slice?
Date: 2018-12-10 17:57:32
Message-ID: CACowWR25m12=Mm8_yAVr4q=Pd-ys=gJ6w2Sb8Zv-8RX-PbULkg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Fri, Dec 7, 2018 at 3:25 PM Stephen Frost <sfrost(at)snowman(dot)net> wrote:
>
>
> Perhaps I'm missing something, but in toast_fetch_datum_slice() there's:
>
> Assert(!VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer));
>
> Further, the only caller of this function today is
> heap_tuple_untoast_attr_slice(), which does:
>
> /* fast path for non-compressed external datums */
> if (!VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer))
> return toast_fetch_datum_slice(attr, sliceoffset, slicelength);
>
> As such, I'm feeling like that conditional to handle the case where this
> function is passed a compressed TOAST value is rather confusing dead
> code.
>
> Hence I'm proposing the attached

Your analysis looks correct to me, I'm pretty sure I had the same reaction,
first time I read through. It would be nice to handle partial decompression
all the way down at this level, but unfortunately the comment at the
Assert() is right: there's no way to know how many of the toasted pieces
need to be read in order to have enough compressed input to create the
desired amount of decompressed output, so there's no choice except to read
the whole compressed thing, even in a slicing context.

P.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Stephen Frost 2018-12-10 18:19:48 Re: Dead code in toast_fetch_datum_slice?
Previous Message Simon Riggs 2018-12-10 17:27:23 Re: Thinking about EXPLAIN ALTER TABLE