Postgres 10 o posterior
btree_gist
ahora también cubre el tipo de datos uuid
, como Paul comentó
. (Y algunos otros tipos de datos, notablemente todos enum
tipos.)
Ahora todo lo que necesita hacer:instale la extensión una vez por base de datos:
CREATE EXTENSION btree_gist;
Entonces su índice debería funcionar.
Relacionado:
- Restricción de exclusión en una columna de cadena de bits con operador AND bit a bit
- Creación de un índice de varias columnas en PostgreSQL, que contiene tanto columnas escalares como matrices
Postgres 9.6 o anterior
(Respuesta original).
Normalmente sugeriría el módulo adicional btree_gist
, pero el tipo uuid
es no cubierto por ella.
En teoría, dado que un UUID es a 128-bit quantity
(según documentación
), la forma más eficiente sería convertirlo en dos bigint
o float8
para el propósito del índice. Pero ninguno de estos moldes está definido en Postgres estándar.
Encontré un , pero parece que no tuvo éxito.
La opción restante es un índice GiST funcional en el text
representación:
CREATE INDEX idx_leaderboads_values_gist
ON leaderboard_entry USING gist (id_leaderboard, cast("value" AS text));
Para hacer uso de este índice funcional, las consultas deben coincidir con esa expresión. Puede usar la abreviatura "value"::text
en las consultas (pero no en la definición del índice sin agregar más paréntesis).
Aparte:no use value
como nombre de columna es una palabra reservada en SQL estándar .
La pregunta es:por qué ¿Necesita el índice GiST? La mejor solución depende del objetivo.