Я нашел этот запрос, который соответствует моим потребностям, благодаря этому ответу здесь для сортировки полей данных в документе JSON.
(Поддельные, сгенерированные случайные данные)
SELECT jsonb_agg(elem)
FROM (
SELECT *
FROM jsonb_array_elements('[{
"id": "1",
"first_name": "Maximo",
"last_name": "Sambiedge",
"email": "msambiedge0@economist.com",
"gender": "Male",
"ip_address": "242.145.232.65"
}, {
"id": "2",
"first_name": "Maria",
"last_name": "Selland",
"email": "aselland1@sitemeter.com",
"gender": "Female",
"ip_address": "184.174.58.32"
}]') a(elem)
ORDER BY (elem->>'email') -- order by integer value of "ts"
) sub;
Как мы видим, это работает с жестко закодированными данными, которые не совсем соответствуют моим потребностям. Кажется, я не могу понять, как заменить данные JSON столбцом jsonb в моей таблице.
Моя попытка, приведенная ниже, выдает «данные не определены»
SELECT jsonb_agg(elem), (SELECT data FROM file_metadata)
FROM (
SELECT *
FROM jsonb_array_elements(data) a(elem)
ORDER BY (elem->>'email')
) sub;
Мои подозрениячто подзапрос необходим внутри предложения FROM
?
Вот SQLFiddle моей проблемы, чтобы помочь описать таблицу и как определяется структура: http://sqlfiddle.com/#!17/41102/92