2015-12-10 3 views
0

У меня есть таблица, где каждая строка имеет структуру JSON следующим образом, что я пытаюсь индекса в базе данных PostgreSQL и было интересно, что лучший способ сделать это:индекс JSON массива в БД Postgres

{ 
    "name" : "Mr. Jones", 
    "wish_list": [ 
     {"present_name": "Counting Crows", 
     "present_link": "www.amazon.com"}, 
     { "present_name": "Justin Bieber", 
     "present_link": "www.amazon.com"}, 
    ] 
} 

Я хотел бы поместить индекс для каждого текущего_имя в массив wish_list. Целью здесь является то, что я хотел бы найти каждую строку, где человек хочет получить конкретный подарок через индекс.

Я читал о том, как create an index on a JSON имеет смысл. У меня возникает проблема создания индекса для каждого элемента массива в объекте JSON.

Лучшее предположение, что у меня есть, используется что-то вроде функции json_array_elements и создания индекса для каждого элемента, возвращаемого через него.

Спасибо за толчок в правильном направлении!

ответ

1

Пожалуйста, проверьте раздел JSONB Indexing в документации Postgres. Для вашего случая индекса конфигурации может быть следующим:

CREATE INDEX idx_gin_wishlist ON your_table USING gin ((jsonb_column -> 'wish_list')); 

Он будет хранить копии каждого ключа и значения внутри wish_list, но вы должны быть осторожны с запросом, который попадет в индекс. Вы должны использовать @> оператор:

SELECT jsonb_column->'wish_list' 
FROM your_table WHERE jsonb_column->'wish_list' @> '[{"present_link": "www.amazon.com", "present_name": "Counting Crows"}]'; 

Сильно предложил проверить существующие nswers:

Смежные вопросы