Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wFGcZ-004uNG-1T for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Apr 2026 19:18:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wFGcX-00AAcM-1Y for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Apr 2026 19:18:53 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wFGcX-00AAcE-0B for pgsql-hackers@lists.postgresql.org; Tue, 21 Apr 2026 19:18:53 +0000 Received: from mail-ua1-x92c.google.com ([2607:f8b0:4864:20::92c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wFGcU-000000028ME-3Poe for pgsql-hackers@lists.postgresql.org; Tue, 21 Apr 2026 19:18:52 +0000 Received: by mail-ua1-x92c.google.com with SMTP id a1e0cc1a2514c-956948531a1so1239319241.2 for ; Tue, 21 Apr 2026 12:18:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776799129; cv=none; d=google.com; s=arc-20240605; b=dfG6ebN22b9P6tiz3p7j7ZgU0vNzYSC0U10Lto3wo4/1BcExOujR4dCkYnfTkNce6E pF1WpKm8kVTPTY6tK5nM5JVI82EaClZvMdiUnxwvhiogb0lWoMsc1jeJ0uB765Aqd2lh 9RCEDlgY+u5s1MYVjGKywgcXGofygoIyZdGdXqVpQ5eMK5GraI6Qm6v4uj+caKsP4YSb Fenxm6Q3uMnI7ZmcEBOUFyhEVWvGpC2HF3uV5cgU+RTTdhQtxqR/ngqjoLQvwoIdpS+k uRbtOySpzel4BxFy9wNno0iXc2mXN5wVm50Q9lXUC1MlC9uLmB44GMg0xxAgkpaSt63R yAYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=awCqAJ74FQJiLvCUkerkzG0igVV9vLoU6pYhBz/Y1WY=; fh=SXj7pPgO3wVUuPwku7Hi83/x0CaUNh+XkvAQ8EAK7y0=; b=f41VwJvPta0RdFH/teRzuldALnqdhOFOKkcu8BqHrlBMHvvoJ+p3BZ8upmQnrsCO4C 7fjJhY/1jeov3/iiAQWEIeIRrHugEFmZgDZgsL+KoSpkPucU09sEAU7qrJ5HcOaydooP vsOj+MJqwXCqHRIIWhKlNriFcSqNKnOehYhqE5jq5dB1qAJfGCiFXQ60c1dOHLj3xfpt 8yrpjZzspNmeHjU/W/Ulst/AQ6daNr8iczvSqhcgLO1YpSzHxpeW8a+v/kI3N0vKl4XQ SSlqnxzjEHnsOPCuIEBRtRIlbK3Kyz18aTnOstsXmgtbdDrNwyh6ibik9nKFwajhSDaq jPDw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776799129; x=1777403929; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=awCqAJ74FQJiLvCUkerkzG0igVV9vLoU6pYhBz/Y1WY=; b=OTlvJppCVgAlWtb2LN95/46s0hIUX36SrVkE8hYieqBoW8F6HTmBzKOAT9HapTOT3x rT6+t30wto8XiltH9jLvq9B4Utbe4PY/kakgC3SP/5Z8xYKrlMPcGQ89UgLz43PTsCsL ken640YGD60/68iclxSXuStMdPESwiIW3+Ngnd/MRVS3i5k4TcYFB7+VZcW6p3ulrkeG yYnE1JufiZTIJSRH0O7Mbr9KFkUdys0o0ZH6gebOhpznN9VfA38l7B7ZxIh0prpo0m5a We1QDViaQP2MrgDsxPqAysIT29th3HLJ099STYcWcSXpIEX9Zt/njiDNC/Z+BPiQ/pYm nCbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776799129; x=1777403929; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=awCqAJ74FQJiLvCUkerkzG0igVV9vLoU6pYhBz/Y1WY=; b=ofvuAn/V4dTHg0dxBHK53V56GfnOrdHQdFmAleDSR9aej2bDcdwv14+zXZg043ahdO b4ILLfTiqp3EL8dcDXCxaDLRhi2m46ll5JAWplvlUt4VgHlIZN93aLio05hUdDgYFd4J 6A5o1kMZ5MOH0EDmEiDOCkY6uXZZdPVaC/zF/Q+iwMwCJPH90lRa7RJp2pyia1UiFNi3 wkzAuRjk1YZLLs+ZrdDtOb2eGaxWfSvd02WSSqWlgdU6BqIojyzeMYD7lmQe/tcJ6lOf a0Y3frEqBUSzx2WzCeVuDwA1ETLBS3ZvmR0I2dK2z46L/ujTTx6imne/WMvyxdWYh0aa /t+A== X-Gm-Message-State: AOJu0YwPu6EP3+IrxIlMw0dWH2C2rBjD88qjc8YEJ6CkSjTzEWnHU+my 5xv9l6jcABB1g8YSzVKkFAdR4oatJu0UgkoHCz6Cc/cV3VVOXT58RkbLd0T6KCGzAtL87nf4Ygt XYm37sC0I8zShAYwSUC8pKTy/ql2i3he/zv2E X-Gm-Gg: AeBDievbaZckqVBlv+3CQO2ordpOIKTi+yCi3DOXFMQnvvqby79qtvsLv9zQfOrhsvR plR/RW+U6G9vSbDGcnt014X26egl1gZYPXNPjx+tSG0tLQ07fLln4IsgW3sQaOlE2QUdEUN7LAZ +dA3z6kRiSV5dS02WdC/uWiyjd+6uQYpbQRC+kBpvcvTo0H949lcySd4ZmOiGOCHvcKS2jAajes wPtsrcRDdgVXKEPvMY/x4p5QhymF9CP23WyWyxxT7sFJYnudaYlYXO7Y7hYp/d1ze4Os0eEo0xB Z+LmeJrX8yVqbKO0FQ== X-Received: by 2002:a05:6102:2ad3:b0:605:b96a:a0d4 with SMTP id ada2fe7eead31-616f8fdbdbdmr8706137137.27.1776799129240; Tue, 21 Apr 2026 12:18:49 -0700 (PDT) MIME-Version: 1.0 From: SATYANARAYANA NARLAPURAM Date: Tue, 21 Apr 2026 12:18:37 -0700 X-Gm-Features: AQROBzAAON1Gonl8QDsVKWjbpgKafSQ7hecka-fwnS2LD7FzXJA0iSAaLLe3KEg Message-ID: Subject: [PATCH] Allow SJE to recognize GiST-backed temporal primary keys To: PostgreSQL Hackers , Paul A Jungwirth Content-Type: multipart/mixed; boundary="000000000000efab7d064ffd4802" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000efab7d064ffd4802 Content-Type: multipart/alternative; boundary="000000000000efab7c064ffd4800" --000000000000efab7c064ffd4800 Content-Type: text/plain; charset="UTF-8" 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 --000000000000efab7c064ffd4800 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Hackers,

relation_has_unique_index_f= or() checks whether join clause equality
operators belong to the index&#= 39;s opfamily via mergeopfamilies.=C2=A0 Since
mergeopfamilies only list= s btree opfamilies, this check always fails
for GiST-backed unique index= es such as those created by PRIMARY KEY
with WITHOUT OVERLAPS, preventin= g self-join elimination.

Fix by falling back to op_in_opfamily() whe= n the mergeopfamilies check
fails.=C2=A0 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 un= iqueness guarantee applies.

Attached=C2=A0a pa= tch to fix this and added corresponding tests.

Tha= nks,
Satya
--000000000000efab7c064ffd4800-- --000000000000efab7d064ffd4802 Content-Type: application/octet-stream; name="0001-Allow-SJE-to-recognize-GiST-backed-temporal-primary-.patch" Content-Disposition: attachment; filename="0001-Allow-SJE-to-recognize-GiST-backed-temporal-primary-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo90apf90 RnJvbSBmN2I3ZDUxNWY4N2ZmY2M4MDM0YTk1MzY0ODcwMWQ1Nzc1NTMwZmM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBzYXR5YW5hcmF5YW5hIG5hcmxhcHVyYW0gPHNhdHlhbmFybGFw dXJhbUBnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMjEgQXByIDIwMjYgMTY6NTY6MTggKzAwMDAKU3Vi amVjdDogW1BBVENIXSBBbGxvdyBTSkUgdG8gcmVjb2duaXplIEdpU1QtYmFja2VkIHRlbXBvcmFs IHByaW1hcnkga2V5cwoKcmVsYXRpb25faGFzX3VuaXF1ZV9pbmRleF9mb3IoKSBjaGVja3Mgd2hl dGhlciBqb2luIGNsYXVzZSBlcXVhbGl0eQpvcGVyYXRvcnMgYmVsb25nIHRvIHRoZSBpbmRleCdz IG9wZmFtaWx5IHZpYSBtZXJnZW9wZmFtaWxpZXMuICBTaW5jZQptZXJnZW9wZmFtaWxpZXMgb25s eSBsaXN0cyBidHJlZSBvcGZhbWlsaWVzLCB0aGlzIGNoZWNrIGFsd2F5cyBmYWlscwpmb3IgR2lT VC1iYWNrZWQgdW5pcXVlIGluZGV4ZXMgc3VjaCBhcyB0aG9zZSBjcmVhdGVkIGJ5IFBSSU1BUlkg S0VZCndpdGggV0lUSE9VVCBPVkVSTEFQUywgcHJldmVudGluZyBzZWxmLWpvaW4gZWxpbWluYXRp b24uCgpGaXggYnkgZmFsbGluZyBiYWNrIHRvIG9wX2luX29wZmFtaWx5KCkgd2hlbiB0aGUgbWVy Z2VvcGZhbWlsaWVzIGNoZWNrCmZhaWxzLiAgVGhlIGNsYXVzZSBpcyBhbHJlYWR5IGtub3duIHRv IGJlIGEgbWVyZ2Vqb2luYWJsZSBlcXVhbGl0eSwgc28KY29uZmlybWluZyB0aGUgb3BlcmF0b3Ig aXMgcmVnaXN0ZXJlZCBpbiB0aGUgaW5kZXgncyBvcGZhbWlseSBpcwpzdWZmaWNpZW50IHRvIHBy b3ZlIHRoYXQgdGhlIGluZGV4J3MgdW5pcXVlbmVzcyBndWFyYW50ZWUgYXBwbGllcy4KLS0tCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jIHwgMTEgKysrKysrKysrLQogc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dCAgICB8IDMwICsrKysrKysrKysrKysrKysr KysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwgICAgICAgICB8IDIxICsr KysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNjEgaW5zZXJ0aW9ucygrKSwgMSBk ZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhw YXRoLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4IDQzMGUw NmRjLi45OTBhZGEzNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5k eHBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCkBAIC00 MjI3LDggKzQyMjcsMTcgQEAgcmVsYXRpb25faGFzX3VuaXF1ZV9pbmRleF9mb3IoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkgKiBpbmRleCBvcGZhbWlseSwgZWxzZSBp dCBpcyBub3QgYXNzZXJ0aW5nIHRoZSByaWdodCBraW5kIG9mCiAJCQkJICogZXF1YWxpdHkgYmVo YXZpb3IgZm9yIHRoaXMgaW5kZXguICBXZSBjaGVjayB0aGlzIGZpcnN0CiAJCQkJICogc2luY2Ug aXQncyBwcm9iYWJseSBjaGVhcGVyIHRoYW4gbWF0Y2hfaW5kZXhfdG9fb3BlcmFuZCgpLgorCQkJ CSAqCisJCQkJICogRm9yIG5vbi1idHJlZSB1bmlxdWUgaW5kZXhlcyAoZS5nLiwgR2lTVC1iYWNr ZWQgdGVtcG9yYWwKKwkJCQkgKiBwcmltYXJ5IGtleXMgY3JlYXRlZCB3aXRoIFdJVEhPVVQgT1ZF UkxBUFMpLCB0aGUgaW5kZXgKKwkJCQkgKiBvcGZhbWlseSB3b24ndCBhcHBlYXIgaW4gbWVyZ2Vv cGZhbWlsaWVzLCB3aGljaCBvbmx5IGxpc3RzCisJCQkJICogYnRyZWUgb3BmYW1pbGllcy4gIEZh bGwgYmFjayB0byBjaGVja2luZyB3aGV0aGVyIHRoZQorCQkJCSAqIGNsYXVzZSdzIGVxdWFsaXR5 IG9wZXJhdG9yIGlzIGRpcmVjdGx5IGEgbWVtYmVyIG9mIHRoZQorCQkJCSAqIGluZGV4J3Mgb3Bm YW1pbHkuCiAJCQkJICovCi0JCQkJaWYgKCFsaXN0X21lbWJlcl9vaWQocmluZm8tPm1lcmdlb3Bm YW1pbGllcywgaW5kLT5vcGZhbWlseVtjXSkpCisJCQkJaWYgKCFsaXN0X21lbWJlcl9vaWQocmlu Zm8tPm1lcmdlb3BmYW1pbGllcywgaW5kLT5vcGZhbWlseVtjXSkgJiYKKwkJCQkJIW9wX2luX29w ZmFtaWx5KGNhc3ROb2RlKE9wRXhwciwgcmluZm8tPmNsYXVzZSktPm9wbm8sCisJCQkJCQkJCQlp bmQtPm9wZmFtaWx5W2NdKSkKIAkJCQkJY29udGludWU7CiAKIAkJCQkvKgpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvam9pbi5vdXQKaW5kZXggNzhiZjAyMmYuLmNjNzJlYjkyIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvam9pbi5vdXQKQEAgLTgyMDIsNiArODIwMiwzNiBAQCBPTiBzal90MS5pZCA9IF90MnQz dDQuaWQ7CiAgICAtPiAgU2VxIFNjYW4gb24gc2pfdDEKICgyNCByb3dzKQogCistLSBTSkUgd2l0 aCBHaVNULWJhY2tlZCB0ZW1wb3JhbCBwcmltYXJ5IGtleSAoV0lUSE9VVCBPVkVSTEFQUykuCist LSBVc2UgaW50NHJhbmdlIGZvciB0aGUgc2NhbGFyIGtleSBzaW5jZSBidHJlZV9naXN0IG1heSBu b3QgYmUgYXZhaWxhYmxlLgorQ1JFQVRFIFRBQkxFIHNqX3RlbXBvcmFsICgKKyAgICBpZCBpbnQ0 cmFuZ2UsCisgICAgdmFsaWRfYXQgZGF0ZXJhbmdlIE5PVCBOVUxMLAorICAgIHZhbCB0ZXh0LAor ICAgIFBSSU1BUlkgS0VZIChpZCwgdmFsaWRfYXQgV0lUSE9VVCBPVkVSTEFQUykKKyk7CistLSBS ZW1vdmUgU0o6IGpvaW4gY292ZXJzIHRoZSBmdWxsIHRlbXBvcmFsIFBLCitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgdDEudmFsIEZST00gc2pfdGVtcG9yYWwgdDEKKyAgICBKT0lOIHNqX3Rl bXBvcmFsIHQyIE9OIHQxLmlkID0gdDIuaWQgQU5EIHQxLnZhbGlkX2F0ID0gdDIudmFsaWRfYXQ7 CisgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgU2VxIFNjYW4gb24gc2pfdGVtcG9yYWwgdDIKKygxIHJvdykKKworLS0gRG9uJ3QgcmVt b3ZlIFNKOiBqb2luIG9ubHkgY292ZXJzIHBhcnQgb2YgdGhlIHRlbXBvcmFsIFBLCitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgdDEudmFsIEZST00gc2pfdGVtcG9yYWwgdDEKKyAgICBKT0lO IHNqX3RlbXBvcmFsIHQyIE9OIHQxLmlkID0gdDIuaWQ7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVz dGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBzal90ZW1wb3JhbCB0MQorICAgLT4gIEluZGV4 IE9ubHkgU2NhbiB1c2luZyBzal90ZW1wb3JhbF9wa2V5IG9uIHNqX3RlbXBvcmFsIHQyCisgICAg ICAgICBJbmRleCBDb25kOiAoaWQgPSB0MS5pZCkKKyg0IHJvd3MpCisKK0RST1AgVEFCTEUgc2pf dGVtcG9yYWw7CiAtLQogLS0gVGVzdCBSb3dNYXJrcy1yZWxhdGVkIGNvZGUKIC0tCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2pvaW4uc3FsCmluZGV4IGZhZTE5MTEzLi5iYmM3YzE1ZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvam9pbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwK QEAgLTMyMTUsNiArMzIxNSwyNyBAQCBKT0lOICgKIAkpIF90MnQzdDQKIE9OIHNqX3QxLmlkID0g X3QydDN0NC5pZDsKIAorLS0gU0pFIHdpdGggR2lTVC1iYWNrZWQgdGVtcG9yYWwgcHJpbWFyeSBr ZXkgKFdJVEhPVVQgT1ZFUkxBUFMpLgorLS0gVXNlIGludDRyYW5nZSBmb3IgdGhlIHNjYWxhciBr ZXkgc2luY2UgYnRyZWVfZ2lzdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4KK0NSRUFURSBUQUJMRSBz al90ZW1wb3JhbCAoCisgICAgaWQgaW50NHJhbmdlLAorICAgIHZhbGlkX2F0IGRhdGVyYW5nZSBO T1QgTlVMTCwKKyAgICB2YWwgdGV4dCwKKyAgICBQUklNQVJZIEtFWSAoaWQsIHZhbGlkX2F0IFdJ VEhPVVQgT1ZFUkxBUFMpCispOworCistLSBSZW1vdmUgU0o6IGpvaW4gY292ZXJzIHRoZSBmdWxs IHRlbXBvcmFsIFBLCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgdDEudmFsIEZST00gc2pf dGVtcG9yYWwgdDEKKyAgICBKT0lOIHNqX3RlbXBvcmFsIHQyIE9OIHQxLmlkID0gdDIuaWQgQU5E IHQxLnZhbGlkX2F0ID0gdDIudmFsaWRfYXQ7CisKKy0tIERvbid0IHJlbW92ZSBTSjogam9pbiBv bmx5IGNvdmVycyBwYXJ0IG9mIHRoZSB0ZW1wb3JhbCBQSworRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUIHQxLnZhbCBGUk9NIHNqX3RlbXBvcmFsIHQxCisgICAgSk9JTiBzal90ZW1wb3JhbCB0 MiBPTiB0MS5pZCA9IHQyLmlkOworCitEUk9QIFRBQkxFIHNqX3RlbXBvcmFsOworCiAtLQogLS0g VGVzdCBSb3dNYXJrcy1yZWxhdGVkIGNvZGUKIC0tCi0tIAoyLjQzLjAKCg== --000000000000efab7d064ffd4802--