Subject: [PATCH] Allow SJE to recognize GiST-backed temporal primary keys

From: SATYANARAYANA NARLAPURAM <[email-masked]>
Date: Tue, 21 Apr 2026 12:18:37 -0700

Hi Hackers,

relation_has_unique_index_for() checks whether join clause equality
operators belong to the index's opfamily via mergeopfamilies.  Since
mergeopfamilies only lists btree opfamilies, this check always fails
for GiST-backed unique indexes such as those created by PRIMARY KEY
with WITHOUT OVERLAPS, preventing self-join elimination.

Fix by falling back to op_in_opfamily() when the mergeopfamilies check
fails.  The clause is already known to be a mergejoinable equality, so
confirming the operator is registered in the index's opfamily is
sufficient to prove that the index's uniqueness guarantee applies.

Attached a patch to fix this and added corresponding tests.

Thanks,
Satya

---

From: David Rowley <[email-masked]>
Date: Wed, 22 Apr 2026 13:54:33 +1200

> with WITHOUT OVERLAPS, preventing self-join elimination.

Please add to the 20-1 CF [1].

David

[1] https://commitfest.postgresql.org/59/