Re: texteq/byteaeq: avoid detoast [REVIEW]
Noah Misch <noah@leadboat.com>
From: Noah Misch <noah@leadboat.com>
To: Magnus Hagander <magnus@hagander.net>
Cc: Itagaki Takahiro <itagaki.takahiro@gmail.com>, KaiGai Kohei <kaigai@ak.jp.nec.com>, Andy Colson <andy@squeakycode.net>, pgsql-hackers@postgresql.org
Date: 2011-01-17T15:28:27Z
Lists: pgsql-hackers
On Mon, Jan 17, 2011 at 11:05:09AM +0100, Magnus Hagander wrote: > On Mon, Jan 17, 2011 at 09:13, Itagaki Takahiro > <itagaki.takahiro@gmail.com> wrote: > > 2011/1/17 KaiGai Kohei <kaigai@ak.jp.nec.com>: > >> Are you talking about an idea to apply toast id as an alternative key? > > > > No, probably. I'm just talking about whether "diff -q A.txt B.txt" and > > "diff -q A.gz ?B.gz" always returns the same result or not. Interesting. > > ... I found it depends on version of gzip. So, if we use such logic, > > we cannot improve toast compression logic because the data is migrated > > by pg_upgrade. > > Yeah, that might be a bad tradeoff. > > I wonder if we can trust the *equality* test, but not the inequality? > E.g. if compressed(A) == compressed(B) we know they're the same, but > if compressed(A) != compressed(B) we don't know they're not they still > might be. Exactly. > I guess with two different versions or even completely different > algorithms we could end up with exactly the same compressed value for > different plaintexts (it's not a cryptographic hash after all), so > that's probably not an acceptable comparison either. It's safe to assume that will never happen. If compressed(A) == compressed(B) when A != B, we would have a lossy compression algorithm. As you say, though, _inequality_ implies nothing for an arbitrary decompressor. One can trivially construct many inputs to the zlib decompressor that yield the same output. "gzip -1" ... "gzip -9" do this, for example. So the main win here would come if we tightly controlled the compressor, such that we could infer something from compressed(A) != compressed(B). That would be an intriguing path to explore. nm