Re: [HACKERS] Custom compression methods
Alexander Korotkov <a.korotkov@postgrespro.ru>
On Mon, Dec 11, 2017 at 8:25 PM, Robert Haas <robertmhaas@gmail.com> wrote: > On Mon, Dec 11, 2017 at 7:55 AM, Ildus Kurbangaliev > <i.kurbangaliev@postgrespro.ru> wrote: > > On Fri, 8 Dec 2017 15:12:42 -0500 > > Robert Haas <robertmhaas@gmail.com> wrote: > >> Maybe a better idea is ALTER COLUMN SET COMPRESSION x1, x2, x3 ... > >> meaning that x1 is the default for new tuples but x2, x3, etc. are > >> still allowed if present. If you issue a command that only adds > >> things to the list, no table rewrite happens, but if you remove > >> anything, then it does. > > > > I like this idea, but maybe it should be something like ALTER COLUMN > > SET COMPRESSION x1 [ PRESERVE x2, x3 ]? 'PRESERVE' is already used in > > syntax and this syntax will show better which one is current and which > > ones should be kept. > > Sure, that works. And I think pglz should exist in the catalog as a > predefined, undroppable compression algorithm. So the default for > each column initially is: > > SET COMPRESSION pglz > > And if you want to rewrite the table with your awesome custom thing, you > can do > > SET COMPRESSION awesome > > But if you want to just use the awesome custom thing for new rows, you can > do > > SET COMPRESSION awesome PRESERVE pglz > > Then we can get all the dependencies right, pg_upgrade works, users > have total control of rewrite behavior, and everything is great. :-) > Looks good. Thus, in your example if user would like to further change awesome compression for evenbetter compression, she should write. SET COMPRESSION evenbetter PRESERVE pglz, awesome; -- full list of previous compression methods I wonder what should we do if user specifies only part of previous compression methods? For instance, pglz is specified but awesome is missing. SET COMPRESSION evenbetter PRESERVE pglz; -- awesome is missing I think we should trigger an error in this case. Because query is specified in form that is assuming to work without table rewrite, but we're unable to do this without table rewrite. I also think that we need some way to change compression method for multiple columns in a single table rewrite. Because it would be way more efficient than rewriting table for each of columns. So as an alternative of ALTER TABLE tbl ALTER COLUMN c1 SET COMPRESSION awesome; -- first table rewrite ALTER TABLE tbl ALTER COLUMN c2 SET COMPRESSION awesome; -- second table rewrite we could also provide ALTER TABLE tbl ALTER COLUMN c1 SET COMPRESSION awesome PRESERVE pglz; -- no rewrite ALTER TABLE tbl ALTER COLUMN c2 SET COMPRESSION awesome PRESERVE pglz; -- no rewrite VACUUM FULL tbl RESET COMPRESSION PRESERVE c1, c2; -- rewrite with recompression of c1 and c2 and removing depedencies ? ------ Alexander Korotkov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company
Commits
-
docs: Update TOAST storage docs for configurable compression.
- e8c435a824e1 14.0 landed
-
Further tweaking of pg_dump's handling of default_toast_compression.
- 54bb91c30e39 14.0 landed
-
Fix interaction of TOAST compression with expression indexes.
- 5db1fd7823a1 14.0 landed
-
Tidy up more loose ends related to configurable TOAST compression.
- e5595de03ec6 14.0 landed
-
Short-circuit slice requests that are for more than the object's size.
- 063dd37ebc76 14.0 landed
-
Mostly-cosmetic adjustments of TOAST-related macros.
- aeb1631ed207 14.0 landed
-
Remove useless configure probe for <lz4/lz4.h>.
- 2c75f8a612b2 14.0 landed
-
Error on invalid TOAST compression in CREATE or ALTER TABLE.
- a4d5284a10b5 14.0 landed
-
docs: Fix omissions related to configurable TOAST compression.
- 24f0e395ac58 14.0 landed
-
More code cleanup for configurable TOAST compression.
- 226e2be3876d 14.0 landed
-
Bring configure support for LZ4 up to snuff.
- 4d399a6fbeb7 14.0 landed
-
Make compression.sql regression test independent of default.
- fd1ac9a54896 14.0 landed
-
Use valid compression method in brin_form_tuple
- 882b2cdc08c4 14.0 landed
-
Fix up pg_dump's handling of per-attribute compression options.
- aa25d1089ac0 14.0 landed
-
Allow configurable LZ4 TOAST compression.
- bbe0a81db69b 14.0 landed
-
Fix inconsistencies in the code
- 6b8548964bcc 13.0 cited
-
Mostly-cosmetic improvements in memory chunk header alignment coding.
- f65d21b25808 11.0 cited
-
Allow numeric to use a more compact, 2-byte header in many cases.
- 145343534c15 9.1.0 cited