Hi,
I am creating a new operator class for version 1 UUID's with an
extension and thought I was almost done by implementing everything
including SortSupport and creating a new opclass as follows:
CREATE OPERATOR CLASS uuid_timestamp_ops FOR TYPE uuid
USING btree AS
OPERATOR 1 <*,
OPERATOR 1 <~ (uuid, timestamp with time zone),
OPERATOR 2 <=*,
OPERATOR 2 <=~ (uuid, timestamp with time zone),
OPERATOR 3 =,
OPERATOR 3 =~ (uuid, timestamp with time zone),
OPERATOR 4 >=*,
OPERATOR 4 >=~ (uuid, timestamp with time zone),
OPERATOR 5 >*,
OPERATOR 5 >~ (uuid, timestamp with time zone),
FUNCTION 1 uuid_timestamp_cmp(uuid, uuid),
FUNCTION 1 uuid_timestamp_only_cmp(uuid, timestamp
with time zone),
FUNCTION 2 uuid_timestamp_sortsupport(internal)
;
And I checked that after installation of the extension, that the
pg_amproc entries are there:
family | left | right | num | amproc
--------+------+-------+-----+----------------------------
623810 | 2950 | 2950 | 1 | uuid_timestamp_cmp
623810 | 2950 | 1184 | 1 | uuid_timestamp_only_cmp
623810 | 2950 | 2950 | 2 | uuid_timestamp_sortsupport
...but when sorting on an (unique) index column, I still get a separate
sort, not using the index, e.g.:
QUERY PLAN
-----------------------------------------------------------------------------------------
Sort (actual rows=934567 loops=1)
Sort Key: id
Sort Method: external merge Disk: 23784kB
-> Index Only Scan using idx_uuid_v1_ext on uuid_v1_ext (actual
rows=934567 loops=1)
Index Cond: (id <* '2b55fb04-33d8-11e9-9cfa-e03f494ffcf7'::uuid)
Heap Fetches: 934567
...but I was expecting a similar plan as for the standard UUID SortSupport:
QUERY PLAN
-----------------------------------------------------------------------------
Index Only Scan using uuid_v1_pkey on uuid_v1 (actual rows=1692025 loops=1)
Index Cond: (id < '2b55fb04-33d8-11e9-9cfa-e03f494ffcf7'::uuid)
Heap Fetches: 1692025
Am I missing something obvious here?
Cheers,
Ancoron