> 30 сент. 2019 г., в 20:56, Tomas Vondra <tomas.von...@2ndquadrant.com>
> написал(а):
>
> I mean this:
>
> /*
> * Use int64 to prevent overflow during calculation.
> */
> compressed_size = (int32) ((int64) rawsize * 9 + 8) / 8;
>
> I'm not very familiar with pglz internals, but I'm a bit puzzled by
> this. My first instinct was to compare it to this:
>
> #define PGLZ_MAX_OUTPUT(_dlen) ((_dlen) + 4)
>
> but clearly that's a very different (much simpler) formula. So why
> shouldn't pglz_maximum_compressed_size simply use this macro?
compressed_size accounts for possible increase of size during compression. pglz
can consume up to 1 control byte for each 8 bytes of data in worst case.
Even if whole data is compressed well - there can be prefix compressed
extremely ineffectively. Thus, if you are going to decompress rawsize bytes,
you need at most compressed_size bytes of compressed input.