On Fri, Apr 28, 2023 at 9:03 AM Magnus Hagander <mag...@hagander.net> wrote:

> On Thu, Apr 27, 2023 at 11:55 AM Laurenz Albe <laurenz.a...@cybertec.at>
> wrote:
> >
> > On Thu, 2023-04-27 at 11:44 +0200, Dominique Devienne wrote:
> > > as someone who must store ZLIB (from ZIP files)
> > > and sometimes LZ4 compressed `bytea` values, I often find it's a shame
> that I have
> > > to decompress them, send them over the wire uncompressed, to have the
> PostgreSQL
> > > backend recompress them when TOAST'ed. That's a waste of CPU and IO
> bandwidth...
> >
> > That's not what you were looking for, but why not store the compressed
> data
> > in the database (after SET STORAGE EXTERNAL on the column) and uncompress
> > them after you have received them on the client side?
>

Laurenz is right of course. But then like Magnus is saying, I lose
transparent decompression,
on read. But also for server-side processing. Some of those compressed
values are actually
XML, and sometimes it can be useful to process (usualyl extract subset) of
those server-side.

Unless there are ways to uncompress values explicitly in SQL or PG/PLSQL?


> That assumes you only have one client. You may want to use the
> transparent compression/decompression from some clients and not for
> others.
>

Which brings up something I forgot to mention earlier, where I
concrentrated from the write-side,
which is that clients would also ideally need a way to fetch the values
still-compressed, when
explicitly requesting it, while others implicitly get the transparent
decompression.

BTW, such a mechanism would open the door for libpq doing that itself
transparently too, I guess.
That would allow network-transport of the compressed values, and
client-side decompression.
Of course, when getting the whole value only, not when getting a subset.
And possibly opt-in only.


> I think it'd be a useful feature to have, but it's not something that
> we have today or that I'm aware of being on anybodys radar. So most
> likely, for now you're stuck with either what you're doing today, or
> as Laurenz suggests handle it completely in the application. You can't
> do the mix.
>

It's a tricky feature, because the client and server have to cooperate and
agree on the exact
format used for compressed values, including meta-data (uncompressed size,
and checksum,
and compression algo+setting and checksum type; e.g. CRC32 vs XXHASH).
That's why I
suspect this won't happen anytime soon or ever. It's just a pie-in-the-sky
brainstorming exercise.

Reply via email to