sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo usar uuid con el tipo de índice postgresql gist?

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:

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.