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 индекс. Най-доброто решение зависи от целта.