Thread: Custom type where not all elements are comparable

Custom type where not all elements are comparable

From
Markus Bertheau
Date:
Hi,

Is it possible to define or implement a type in PostgreSQL not all
values of which are comparable to each other? In particular I'm thinking
of a duration type similar to the XML Schema duration type[1]. For
example P2D (2 days) is less than P4D (4 days), but P1M (1 month) and
P30D (30 days) are not comparable.

Thanks.

[1] http://www.w3.org/TR/xmlschema-2/#duration

-- 
Markus Bertheau <twanger@bluetwanger.de>



Re: Custom type where not all elements are comparable

From
Tom Lane
Date:
Markus Bertheau <twanger@bluetwanger.de> writes:
> Is it possible to define or implement a type in PostgreSQL not all
> values of which are comparable to each other?

Certainly, as long as you don't expect to be able to btree-index it,
sort it, or DISTINCT it.  (In theory we could probably handle DISTINCT
using hash aggregation, as long as equality behaves sanely; but that's
not implemented now.)

Probably it'd be reasonable for the comparison operators to return
NULL for a noncomparable pair of inputs.
        regards, tom lane


Re: Custom type where not all elements are comparable

From
Peter Eisentraut
Date:
Markus Bertheau wrote:
> Is it possible to define or implement a type in PostgreSQL not all
> values of which are comparable to each other? In particular I'm
> thinking of a duration type similar to the XML Schema duration
> type[1]. For example P2D (2 days) is less than P4D (4 days), but P1M
> (1 month) and P30D (30 days) are not comparable.

Smells like the interval type.