Re: [HACKERS] Custom compression methods
Andrew Dunstan <andrew@dunslane.net>
On 3/24/21 12:45 PM, Tom Lane wrote: > Robert Haas <robertmhaas@gmail.com> writes: >> On Wed, Mar 24, 2021 at 11:42 AM Tom Lane <tgl@sss.pgh.pa.us> wrote: >>> On reflection, though, I wonder if we've made pg_dump do the right >>> thing anyway. There is a strong case to be made for the idea that >>> when dumping from a pre-14 server, it should emit >>> SET default_toast_compression = 'pglz'; >>> rather than omitting any mention of the variable, which is what >>> I made it do in aa25d1089. >> But also ... aren't we just doing this to work around a test case that >> isn't especially good in the first place? Counting the number of lines >> in the diff between A and B is an extremely crude proxy for "they're >> similar enough that we probably haven't broken anything." > I wouldn't be proposing this if the xversion failures were the only > reason; making them go away is just a nice side-effect. The core > point is that the charter of pg_dump is to reproduce the source > database's state, and as things stand we're failing to ensure we > do that. > > (But yeah, we really need a better way of making this check in > the xversion tests. I don't like the arbitrary "n lines of diff > is probably OK" business one bit.) > > Well, I ran this module for years privately and used to have a matrix of the exact number of diff lines expected for each combination of source and target branch. If I didn't get that exact number of lines I reported an error on stderr. That was fine when we weren't reporting the results on the server, and I just sent an email to -hackers if I found an error. I kept this matrix by examining the diffs to make sure they were all benign. That was a pretty laborious process. So I decided to try a heuristic approach instead, and by trial and error came up with this 2000 lines measurement. When this appeared to be working and stable the module was released into the wild for other buildfarm owners to deploy. Nothing is hidden here - the diffs are reported, see for example <https://buildfarm.postgresql.org/cgi-bin/show_stage_log.pl?nm=crake&dt=2021-03-28%2015%3A37%3A07&stg=xversion-upgrade-REL9_4_STABLE-HEAD> What we're comparing here is target pg_dumpall against the original source vs target pg_dumpall against the upgraded source. If someone wants to come up with a better rule for detecting that nothing has gone wrong, I'll be happy to implement it. I don't particularly like the current rule either, it's there faute de mieux. cheers andrew -- Andrew Dunstan EDB: https://www.enterprisedb.com
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