I can't use directly uuid with gist index
CREATE INDEX idx_leaderboads_values_gist
ON leaderboard_entry
USING gist
(id_leaderboard , value);
And I got this error:
ERROR: data type uuid has no default operator class for access method "gist"
HINT: You must specify an operator class for the index or define a default operator class for the data type.
Postgres 10 or newer
btree_gist now also covers the data type
uuid, like Paul commented. (And some other data types, notably allenumtypes.)Now all you need is to install the extension once per database:
Then your index should just work.
Related:
Postgres 9.6 or older
(Original answer.)
Normally I would suggest the additional module btree_gist, but the type
uuidis not covered by it.In theory, since a UUID is
a 128-bit quantity(per documentation), the most efficient way would be to convert it to twobigintorfloat8for the purpose of the index. But none of these casts are defined in standard Postgres.I found a stab in that direction in the pqsql-hackers list, but it seems unsuccessful.
The remaining option is a functional GiST index on the
textrepresentation:To make use of this functional index, queries must match that expression. You can use the shorthand
"value"::textin queries (but not in the index definition without adding more parentheses).Aside: do not use
valueas column name it's a reserved word in standard SQL.The question is: why do you need the GiST index. The best solution depends on the objective.