Вопрос касается выбора из JSON в PostgreSQL.
Например, приложение содержит данные перевода в jsonb:
{
"en":{
"locale":"en",
"title":"Title",
"textShort":"Short text",
"textFull":"Full text"
}
"ru":{
"locale":"ru",
"title":"Заголовок",
"textShort":"Короткий текст",
"textFull":"Подробный текст"
}
}
Этот запрос успешно работает:
select *
from content_records
where translations::json->'en'->>'title' like '%Title.';
Но этот запрос требует информации о локали, но дело в том, что мы ничего не знаем о локалях, и поиск должен быть выполнен для каждой локали, например:
select *
from content_records
where translations::json->'any locale'->>'title' like '%Title.';
В MySQL он работает как:
select *
from content_records
where LOWER(JSON_EXTRACT(translations, '$.*.title')) LIKE LOWER(:title);
В PostgreSQL есть аналогичная функция: json_extract_path, но для нее требуются ключевые слова, и вы не можете пропустить ключ, как символ * в MySQL.
Вопрос в том -как сделать выбор вложенного JSON в этой ситуации?