В настоящее время у меня есть сеансы таблицы с действиями столбца (JSONB).
Я могу правильно сохранить массив из моего интерфейса в базу данных, используя array_to_jsonb(array value)
.
Структура моего массива (значение массива) выглядит следующим образом:
var arrayStructure = [
{name: 'email client', check: false},
{name: 'send contract', check: false}
]
В отличие от многих вопросов, которые я видел в SO об изменении JSONB илиобращаясь к определенным ключам, меня интересует только преобразование всех данных JSONB обратно в массив для внешнего интерфейса.
Мое временное исправление заключается в отображении массива и использовании JSON.parse () в Javascript для реструктуризации каждого объекта.в массиве.Я не могу использовать JSON.parse () для всего массива, так как он выдает ошибку.
Я ищу запрос, чтобы вернуть формат массива в тип данных JSONB.Я видел JSONB_SET, LATERAL и JSONB_ARRAY_ELEMENTS_TEXT.Но не таким способом, который работал, чтобы вернуть правильный массив.
Начинается как: JSONB в столбце действий в таблице с именами сеансов
Должен привести к: Запрос, который возвращает все строки, но сСтолбец действий (JSONB), преобразованный обратно в массив для внешнего интерфейса:
select session_id, session_name, someFunction or lateral here(actions) from sessions
Снимок экрана таблицы сеансов
Я пробовал подобные запросы:
SELECT
session_id,
actions::jsonb -> 'name' as name
FROM sessions;
И получить обратно нулевое имя.Я пытался - >> получить доступ к более глубокому уровню, но это тоже не сработало.
Это половина правильного результата запроса:
select session_id, jsonb_array_elements_text(actions)
from sessions
group by session_id;
Что приводит к этому (обратите внимание только на результаты для session_id из 264): результат запроса
Теперь у меня есть объекты в их собственных строках, такие как:
{"name": "some task", "check": "false}
Когда для столбца действий требуется:
[ {name: "some task", check: false}, {name: "other task", check: true} ]
Так что мне нужно дополнительно проанализировать JSONи группировать по session_id.Я просто пытаюсь создать подзапрос, который делает это.
Шаги для создания настройки:
create table fakeSessions (
session_id serial primary key,
name varchar(20),
list jsonb
)
insert into fakeSessions(name, list)
VALUES(
'running',
'["{\"name\":\"inquired\",\"check\":false}", "{\"name\":\"sent online guide\",\"check\":false}", "{\"name\":\"booked!\",\"check\":false}"]'
)
insert into fakeSessions(name, list)
VALUES(
'snowboarding',
'["{\"name\":\"rental\",\"check\":false}", "{\"name\":\"booked ski passes\",\"check\":false}", "{\"name\":\"survey\",\"check\":false}"]'
)
Ближайший созданный мной запрос:
with exports as (
select jsonb_array_elements_text(actions)::jsonb as doc from sessions
)
select array_agg(doc) from
exports, sessions
group by session_id;
Получите текстовые значения, а затем примените статистическую функцию к этим возвращаемым строкам.Просто не могу заставить select array_agg (doc) работать как положено.Скорее всего, потому что мне нужна другая функция в этом месте.