Re: Compressed TOAST Slicing
Daniel Verite <daniel@manitou-mail.org>
From: "Daniel Verite" <daniel@manitou-mail.org>
To: "Paul Ramsey" <pramsey@cleverelephant.ca>
Cc: "Simon Riggs" <simon@2ndquadrant.com>,rafia.sabih@enterprisedb.com,"Tom
Lane" <tgl@sss.pgh.pa.us>,"Stephen Frost"
<sfrost@snowman.net>,"PostgreSQL Hackers"
<pgsql-hackers@lists.postgresql.org>
Date: 2019-02-20T18:50:07Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Add support for partial TOAST decompression
- 4d0e994eed83 12.0 landed
-
Remove remaining hard-wired OID references in the initial catalog data.
- 3aa0395d4ed3 12.0 cited
-
Rephrase references to "time qualification".
- ebcc7bf949ba 12.0 cited
Paul Ramsey wrote:
> Oddly enough, I couldn't find many/any things that were sensitive to
> left-end decompression. The only exception is "LIKE this%" which
> clearly would be helped, but unfortunately wouldn't be a quick
> drop-in, but a rather major reorganization of the regex handling.
What about starts_with(string, prefix)?
text_starts_with(arg1,arg2) in varlena.c does a full decompression
of arg1 when it could limit itself to the length of the smaller arg2:
Datum
text_starts_with(PG_FUNCTION_ARGS)
....
len1 = toast_raw_datum_size(arg1);
len2 = toast_raw_datum_size(arg2);
if (len2 > len1)
result = false;
else
{
text *targ1 = DatumGetTextPP(arg1);
text *targ2 = DatumGetTextPP(arg2);
result = (memcmp(VARDATA_ANY(targ1), VARDATA_ANY(targ2),
VARSIZE_ANY_EXHDR(targ2)) == 0);
...
Best regards,
--
Daniel Vérité
PostgreSQL-powered mailer: http://www.manitou-mail.org
Twitter: @DanielVerite