Глубокий поиск в поле jsonb PostgreSQL без знания ключа - PullRequest
0 голосов
/ 04 марта 2020

Предполагая следующие данные jsonb:

{
    "3f210b": {
        "hash": "e60ab24c549ac7060fzedfefe563e8493d759bb"
    },
    "Siaa1b3": {
        "hash": "d24b37efgregr1a2c6db3b9334b3bf4fef3f22bfc9a43f"
    }
}

Возможно ли в PostgreSQL выполнить глубокий поиск jsonb без знания ключа (3f210b & Siaa1b3), но мы знаем ха sh .

1 Ответ

1 голос
/ 04 марта 2020

С Postgres 11 вам нужно будет развернуть это значение:

select *
from the_table t
where exists (select *
              from jsonb_each(t.the_column) as x(ky, item)
              where x.item ->> 'hash' = 'd24b37efgregr1a2c6db3b9334b3bf4fef3f22bfc9a43f');

С Postgres 12 вы можете использовать новое выражение JSON / Path:

select *
from the_table t
where jsonb_path_exists(the_column, '$.*.hash ? (@ == "d24b37efgregr1a2c6db3b9334b3bf4fef3f22bfc9a43f")')
...