On 2021-Mar-19, Robert Haas wrote: > On Fri, Mar 19, 2021 at 10:11 AM Dilip Kumar <dilipbal...@gmail.com> wrote: > > Also added a test case for vacuum full to recompress the data. > > I committed the core patch (0003) with a bit more editing. Let's see > what the buildfarm thinks.
I updated the coverage script to use --with-lz4; results are updated. While eyeballing the results I noticed this bit in lz4_decompress_datum_slice(): + /* slice decompression not supported prior to 1.8.3 */ + if (LZ4_versionNumber() < 10803) + return lz4_decompress_datum(value); which I read as returning the complete decompressed datum if slice decompression is not supported. I thought that was a bug, but looking at the caller I realize that this isn't really a problem, since it's detoast_attr_slice's responsibility to slice the result further -- no bug, it's just wasteful. I suggest to add comments to this effect, perhaps as the attached (feel free to reword, I think mine is awkward.) -- Álvaro Herrera 39°49'30"S 73°17'W Si no sabes adonde vas, es muy probable que acabes en otra parte.
diff --git a/src/backend/access/common/detoast.c b/src/backend/access/common/detoast.c index 2fef40c2e9..6c79bd2a40 100644 --- a/src/backend/access/common/detoast.c +++ b/src/backend/access/common/detoast.c @@ -497,6 +497,9 @@ toast_decompress_datum(struct varlena *attr) * Decompress the front of a compressed version of a varlena datum. * offset handling happens in detoast_attr_slice. * Here we just decompress a slice from the front. + * + * If slice decompression is not supported, the return datum is the + * decompression of the full datum. */ static struct varlena * toast_decompress_datum_slice(struct varlena *attr, int32 slicelength) diff --git a/src/backend/access/common/toast_compression.c b/src/backend/access/common/toast_compression.c index a6f8b79a9e..080ddcf93c 100644 --- a/src/backend/access/common/toast_compression.c +++ b/src/backend/access/common/toast_compression.c @@ -203,6 +203,9 @@ lz4_decompress_datum(const struct varlena *value) /* * Decompress part of a varlena that was compressed using LZ4. + * + * If slice decompression is not supported, the return datum is the + * decompression of the full datum. */ struct varlena * lz4_decompress_datum_slice(const struct varlena *value, int32 slicelength)