ФорумРазработкаБазы данных → Поиск по json в pg

Поиск по json в pg

  • kryptamine

    Сообщения: 38 Репутация: N Группа: Кто попало

    Spritz Сен. 4, 2016, 10:41 д.п.

    Всем привет!
    Мужики выручайте.

    
     id | list (json)
    ----+------
      1 | [1,2,3]
    (1 row)
    

    Есть json поле в постгре, умеет ли она искать по массиву? Т.е. я хочу что то типа where list in (1,2,3)
    И вообще адекватная ли это затея, так хранить данные, т.е. я не хочу заводить связующую manytomany таблицу, а хранить массив айдишников из конечной таблицы таким образом.
    Спасибо.

  • kryptamine

    Сообщения: 38 Репутация: N Группа: Кто попало

    Spritz Сен. 4, 2016, 1:10 п.п., спустя 19 минут 42 секунды

    Спасибо большое, но я так понял этот операнд просто приводит поле к стринге и работает как текстовый поиск, что не совсем корректно.
    Т.е. чтобы искать некоторые вхождения мне придется делать что-то типа list::text like '%2,3%'. Есть в pg более адекватный способ работы с такими полями без костылинга?

  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz Сен. 4, 2016, 1:19 п.п., спустя 8 минут 55 секунд

    для этого есть оператор @> в первой доке из гугла примеры п. 8.14.3.

    PostgreSQL: Documentation: 9.4: JSON Types [postgresql.org]

  • kryptamine

    Сообщения: 38 Репутация: N Группа: Кто попало

    Spritz Сен. 4, 2016, 1:23 п.п., спустя 4 минуты 55 секунд

    Благодарю, то что нужно, т.е. в таком виде list::jsonb @> '[1,2]' отработало.

  • kryptamine

    Сообщения: 38 Репутация: N Группа: Кто попало

    Spritz Сен. 4, 2016, 1:33 п.п., спустя 9 минут 6 секунд

    И последний вопросик, можете прояснить такой момент, почему опять же нужно такого рода приведение ::jsonb, это же json поле, почему нельзя просто list @> '[1,2]', почему субд сама не понимает как ей работать с такими полями.
    Вообще кто нибудь хранит таким образом данные? Или я что-то делаю не так?

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Сен. 4, 2016, 4:11 п.п., спустя 2 часа 38 минут 22 секунды

    лол

    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!