Postgres 10 или по-нов
btree_gist
вече обхваща и типа данни uuid
, като Пол коментира
. (И някои други типове данни, забележително всички enum
типове.)
Сега всичко, което трябва да направите:инсталирайте разширението веднъж за база данни:
CREATE EXTENSION btree_gist;
Тогава вашият индекс просто трябва да работи.
Свързани:
- Ограничение за изключване на колона с битов низ с побитов оператор И
- Създаване на многоколонен индекс в PostgreSQL, съдържащ както скаларни, така и масивни колони
Postgres 9.6 или по-стара версия
(Оригинален отговор.)
Обикновено бих предложил допълнителния модул btree_gist
, но типът uuid
е не обхванати от него.
На теория, тъй като UUID е a 128-bit quantity
(по документация
), най-ефективният начин би бил да го конвертирате в два bigint
или float8
за целите на индекса. Но нито едно от тези отливки не е дефинирано в стандартния Postgres.
I found a stab in тази посока в списъка с pqsql-хакери , но изглежда неуспешно.
Останалата опция е функционален GiST индекс върху text
представяне:
CREATE INDEX idx_leaderboads_values_gist
ON leaderboard_entry USING gist (id_leaderboard, cast("value" AS text));
За да се използва този функционален индекс, заявките трябва да съответстват на този израз. Можете да използвате съкращенията "value"::text
в заявки (но не и в дефиницията на индекс без добавяне на повече скоби).
Настрана:не използвайте value
като име на колона това е запазена дума в стандартен SQL .
Въпросът е:защо имате ли нужда от GiST индекс. Най-доброто решение зависи от целта.