172 похожих чатов

Добрый день. Есть таблица products с полем JSON attrs, которое содержит

информацию вида: {"steel":"AISI 304","diameter":"8","side_thickness":"1"}

Ключи могут быть различных для разных записей.

Запрос следующего вида возвращает все данные в виде таблицы из 2х стобцов, всё нормально
SELECT a.key, a.value
FROM products p
CROSS JOIN json_each_text(p.attrs) a;

Но ни во временную таблицу, ни сгруппировать, даже DISTINCT взять не получается, вылетает ошибка:
[22023] ERROR: cannot deconstruct an array as an object


SELECT t.key, array_agg(t.value) FROM (
SELECT a.key, a.value
FROM products p
CROSS JOIN json_each_text(p.attrs) a
) t
GROUP BY t.key;

Как-то можно это победить?

2 ответов

6 просмотров

cannot deconstruct an array as an object ты к данным json обращаешься как к массиву '[1,2,3]'::json->2 надо поигаться в консоли с примерами по ссылках, шоб понять синтаксис я так делаю) https://www.postgresql.org/docs/9.3/functions-json.html https://stackoverflow.com/questions/32626261/how-to-parse-json-in-postgresql и я бы так не стал хранить в постресе данные. мне кажется это уже нереляционная бд получается, когда ты так хранишь данные

Sergey-Gerasimov Автор вопроса
Alexander E
cannot deconstruct an array as an object ты к дан...

Хранение данных - это уже другое, приходится работать с тем, что есть. А по обращению не очень понятно, ведь json_each возвращает рекорд с полями key и value, и я только к ним обращаюсь. Но самое интересное... если добавить еще один JOIN: select distinct "code", "value" from "products" inner join "subcategories" on "subcategories"."id" = "products"."subcategory_id" cross join json_each_text(attrs) a(code, value) where "subcategories"."category_id" = 1; То без проблем отрабатывает запрос

Похожие вопросы

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Всем привет! Массив вводится с клавиатуры, кол-во элементов неизвестно, поэтому я указал arr db 100 dup(?) С нахождением максимума проблем нет, а вот минимум почему-то всегд...
En Vind Av Sorg
11
Помогите, пожалуйста, делаю программу для для подсчёта корней квадратного уравнения, знаю, что есть куча недочётов, недоработок, но основная проблема в том, что почему-то при ...
NYC
13
#include <stdio.h> int main(void) { int n; scanf("%d", &n); int digits1[n] = {0}; int digits2[n] = {0}; я не могу таким образом заранее массив нулями заполнить?
Linus
12
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
я про форму записи. смысл указывать что 8 байтный регистр 8 байт?
Aiwan \ (•◡•) / _bot
10
Вроде бы вопрос уже заезжанный, но тем не менее У меня есть функция menu() которая выводит набор возможных действий, а затем спрашивает у пользователя что он хотел бы сделать....
David Golovatin
3
а как бы вылезти из ИО, что то типа IO -> Ether или в какую сторону смотреть ? что то туплю
Fedor
14
Карта сайта