Re: Parsing of hex encoding strings

From: Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>
To: Thomas de Zeeuw <thomasdezeeuw(at)gmail(dot)com>
Cc: pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: Parsing of hex encoding strings
Date: 2026-10-05 14:10:26
Message-ID: 1f2d35acc290d5644cac1217048745ff156e4af0.camel@cybertec.at
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Mon, 2026-10-05 at 12:58 +0200, Thomas de Zeeuw wrote:
> Not great that the first thing I read that this a design error, especially since
> you’re not familiar with the entire system. In any case, allow me to expand on
> why we do it this way.

I could only go by what you told us, and as you said "strings", I assumed you were
talking about character strings, not binary data. Full-text search is no good for
binary data, even if encoded - it is only useful for natural language strings.

> We have various columns that we want to search, most of them are English text
> (or at least some kind of human language). However, one of them is a public key
> encoded as a hex string. We want to search all those columns in single query
> and since most of them are English text we decided on full text search. We
> imagined one of the words in the search vector would simply be the hex encoded
> public key. This actually works pretty well for our use case, with the exception
> of the case I’ve described in the original email.
>
> The trigram search doesn’t work well for the English text columns we have.
> We could do the trigram search just for the hex encoded public key, but we
> thought it would return too many false positives given that we’re only
> interested in exact and prefixed matches. The similarity searching property
> of trigrams would be negative here as we could include public keys that’s
> we're not searching for.

If all you want to do is prefix matches and exact matches, I would use an
ordinary LIKE with a regular B-tree index. That should work well, unless
the public keys are large. In that case, you could try the ^@ operator
and an SP-GiST index. Or resort to trigrams.

> We’ll resort to converting the hex encoded public key to a vector/query
> by casting instead of using the various functions for this.

No idea what a vector/query is, but good if it works for you.

Yours,
Laurenz Albe

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Laurenz Albe 2026-10-05 14:12:35 Re: bug or feature
Previous Message Thomas de Zeeuw 2026-10-05 10:58:01 Re: Parsing of hex encoding strings