PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie verwende ich uuid mit dem Postgresql-Gist-Indextyp?

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:

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.