domain for WITHOUT OVERLAPS

From: jian he <jian(dot)universality(at)gmail(dot)com>
To: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: domain for WITHOUT OVERLAPS
Date: 2025-12-03 07:38:56
Message-ID: CACJufxGoAmN_0iJ=hjTG0vGpOSOyy-vYyfE+-q0AWxrq2_p5XQ@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

hi.

While working on domain IS JSON, I found out that
WITHOUT OVERLAPS does not support for domain too.
but it does support user-defined range types (via CREATE TYPE).

after looking around:
check_exclusion_or_unique_constraint->ExecWithoutOverlapsNotEmpty
ExecWithoutOverlapsNotEmpty typtype should be domain's basetype's typtype
otherwise it will fallback to:
elog(ERROR, "WITHOUT OVERLAPS column \"%s\" is not a range
or multirange",
NameStr(attname));

That means we need to cheaply get the domain basetype's
pg_type.typtype in lookup_type_cache.
so I added a new char field: TypeCacheEntry.domainBaseTyptype.

it should be working:
For primary key, unique constraint: pg_index.indclass is
the same for domain and basetype.
no need to worry too much about pg_index.indcollation because range type is not
collateable.
For foreign key: pg_constraint (conpfeqop, conppeqop, conffeqop) are the same
for domain and basetype.

--
jian
https://www.enterprisedb.com/

Attachment Content-Type Size
v1-0001-domain-for-WITHOUT-OVERLAPS.patch text/x-patch 10.4 KB

Browse pgsql-hackers by date

  From Date Subject
Next Message Antonin Houska 2025-12-03 07:56:01 Re: Adding REPACK [concurrently]
Previous Message Chao Li 2025-12-03 06:52:14 Re: Cleanup shadows variable warnings, round 1