On 2/6/19 2:32 AM, Pavan Deolasee wrote: > Hello, > > Currently either the table level option `toast_tuple_target` or the > compile time default `TOAST_TUPLE_TARGET` is used to decide whether a > new tuple should be compressed or not. While this works reasonably > well for most situations, at times the user may not want to pay the > overhead of toasting, yet take benefits of inline compression. > > I would like to propose a new table level option, > compress_tuple_target, which can be set independently of > toast_tuple_target, and is checked while deciding whether to compress > the new tuple or not. > > For example, > > CREATE TABLE compresstest250 (a int, b text) WITH > (compress_tuple_target = 250); > CREATE TABLE compresstest2040 (a int, b text) WITH > (compress_tuple_target = 2040); > > -- shouldn't get compressed nor toasted > INSERT INTO compresstest250 VALUES (1, repeat('1234567890',20)); > > -- should get compressed, but not toasted > INSERT INTO compresstest250 VALUES (2, repeat('1234567890',30)); > > -- shouldn't get compressed nor toasted > INSERT INTO compresstest2040 VALUES (1, repeat('1234567890',20)); > INSERT INTO compresstest2040 VALUES (2, repeat('1234567890',30)); > > Without this patch, the second INSERT will not compress the tuple > since its length is less than the toast threshold. With the patch and > after setting table level option, one can compress such tuples. > > The attached patch implements this idea. >
This is a nice idea, and I'm a bit surprised it hasn't got more attention. The patch itself seems very simple and straightforward, although it could probably do with having several sets of eyeballs on it. cheers andrew -- Andrew Dunstan https://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services