Ошибка при создании индекса gin в столбце jsonb postgresql9.5

У меня есть product_reviews TABLE с product_review столбцом jsonb.

jsonb column : [{"comment": [{"condition": "Good", "Entered": "true"}], "productid": 321}]

CREATE INDEX idx_product_reviews_product_review ON product_reviews  USING gin (CAST (product_review ->> 'productid') AS bigint )   ;

Поэтому, когда я пытаюсь создать индекс gin для этого столбца jsonb, я получаю сообщение об ошибке.

ERROR:  data type bigint has no default operator class for access method "gin"
HINT:  You must specify an operator class for the index or define a default operator class for the data type.

Я хочу индексировать productid как значения типа bigint, поэтому я могу получить значения jsonb «comment», сравнивая этот productid.


person sommeguyy    schedule 19.02.2017    source источник
comment
для функционального индекса вы должны использовать классический индекс btree - не используйте gin   -  person Pavel Stehule    schedule 19.02.2017
comment
когда я просто меняю GIN на BTREE, ошибка не выдается...   -  person sommeguyy    schedule 19.02.2017
comment
но почему мне нельзя использовать GIN, как в моем примере?   -  person sommeguyy    schedule 19.02.2017
comment
Обычно индексы GIN,GiST используются для типов, где операция < или > не определена. Когда эти операции определены, вы можете использовать индекс BTREE. Почти для всех типов поддерживается индекс GIN, GIST или индекс BTREE, но не оба случая.   -  person Pavel Stehule    schedule 19.02.2017
comment
Допустим, у меня есть массив с уникальными целочисленными элементами. Если я ищу определенное значение в массиве, могу ли/должен ли я использовать индекс GIN для этого массива, чтобы повысить производительность?   -  person sommeguyy    schedule 19.02.2017
comment
и имеет ли длина массива какое-либо отношение к выбору типа индекса?   -  person sommeguyy    schedule 19.02.2017
comment
массивы могут иметь индексы GIN или GiST. Эти индексы ведут себя по-разному в зависимости от длины результата и длины массива. Вы должны проверить угловые случаи.   -  person Pavel Stehule    schedule 19.02.2017


Ответы (1)


btree_gin https://www.postgresql.org/docs/9.5/btree-gin.html предоставляет классы операторов gin для многих типов данных, включая bigint.

создайте индекс после включения расширения btree_gin, используя

CREATE EXTENSION btree_gin;
person arunpandianp    schedule 23.03.2019