Postgres 10 oder neuer
btree_gist
deckt nun auch den Datentyp uuid
ab , wie Paul kommentierte
. (Und einige andere Datentypen, bemerkenswerterweise alle enum
Typen.)
Jetzt müssen Sie nur noch die Erweiterung einmal pro Datenbank installieren:
CREATE EXTENSION btree_gist;
Dann sollte Ihr Index einfach funktionieren.
Verwandte:
- Ausschlussbeschränkung für eine Bitstring-Spalte mit bitweisem UND-Operator
- Mehrspaltigen Index in PostgreSQL erstellen, der sowohl skalare als auch Array-Spalten enthält
Postgres 9.6 oder älter
(Originalantwort.)
Normalerweise würde ich das Zusatzmodul btree_gist
, aber vom Typ uuid
ist nicht davon abgedeckt.
Theoretisch, da eine UUID a 128-bit quantity
ist (pro Dokumentation
). ), wäre der effizienteste Weg, es in zwei bigint
umzuwandeln oder float8
für den Index. Aber keine dieser Umwandlungen ist in Standard-Postgres definiert.
Ich habe einen , aber es scheint nicht erfolgreich zu sein.
Die verbleibende Option ist ein funktionaler GiST-Index auf den text
Darstellung:
CREATE INDEX idx_leaderboads_values_gist
ON leaderboard_entry USING gist (id_leaderboard, cast("value" AS text));
Um diesen funktionalen Index zu verwenden, müssen Abfragen mit diesem Ausdruck übereinstimmen. Sie können die Abkürzung "value"::text
verwenden in Abfragen (aber nicht in der Indexdefinition, ohne weitere Klammern hinzuzufügen).
Übrigens:verwenden Sie nicht value
als Spaltenname ist es ein reserviertes Wort in Standard-SQL .
Die Frage ist:warum Benötigen Sie den GiST-Index? Die beste Lösung hängt von der Zielsetzung ab.