Re: [HACKERS] Custom compression methods
Alexander Korotkov <a.korotkov@postgrespro.ru>
On Mon, Dec 11, 2017 at 8:46 PM, Robert Haas <robertmhaas@gmail.com> wrote: > On Mon, Dec 11, 2017 at 12:41 PM, Alexander Korotkov > <a.korotkov@postgrespro.ru> wrote: > > 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 > > Right. > > > 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 think that should just rewrite the table in that case. PRESERVE > should specify the things that are allowed to be preserved -- its mere > presence should not be read to preclude a rewrite. And it's > completely reasonable for someone to want to do this, if they are > thinking about de-installing awesome. > OK, but NOTICE that presumably unexpected table rewrite takes place could be still useful. Also we probably should add some view that will expose compression methods whose are currently preserved for columns. So that user can correctly construct SET COMPRESSION query that doesn't rewrites table without digging into internals (like directly querying pg_depend). > 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 > > > > ? > > Hmm. ALTER TABLE allows multi comma-separated subcommands, so I don't > think we need to drag VACUUM into this. The user can just say: > > ALTER TABLE tbl ALTER COLUMN c1 SET COMPRESSION awesome, ALTER COLUMN > c2 SET COMPRESSION awesome; > > If this is properly integrated into tablecmds.c, that should cause a > single rewrite affecting both columns. OK. Sorry, I didn't notice we can use multiple subcommands for ALTER TABLE in this case... ------ 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