[PATCH] Expand character set for ltree labels

Garen Torikian <gjtorikian@gmail.com>

From: Garen Torikian <gjtorikian@gmail.com>
To: pgsql-hackers@lists.postgresql.org
Date: 2022-10-04T16:54:46Z
Lists: pgsql-hackers

Attachments

Dear hackers,

I am submitting a patch to expand the label requirements for ltree.

The current format is restricted to alphanumeric characters, plus _.
Unfortunately, for non-English labels, this set is insufficient. Rather
than figure out how to expand this set to include characters beyond the
ASCII limit, I have instead opted to provide users with some mechanism for
storing encoded UTF-8 characters which is widely used: punycode (
https://en.wikipedia.org/wiki/Punycode).

The punycode range of characters is the exact same set as the existing
ltree range, with the addition of a hyphen (-). Within this system, any
human language can be encoded using just A-Za-z0-9-.

On top of this, I added support for two more characters: # and ;, which are
used for HTML entities. Note that & and % have special significance in the
existing ltree logic; users would have to encode items as #20; (rather than
%20). This seems a fair compromise.

Since the encoding could make a regular slug even longer, I have also
doubled the character limit, from 256 to 512.

Please let me know if I can provide any more information or changes.

Very sincerely,
Garen

Commits

  1. Allow hyphens in ltree labels

  2. Check that xmax didn't commit in freeze check.

  3. Push lpp variable closer to usage in heapgetpage()

  4. tests: Restrict pg_locks queries in advisory_locks.sql to current database