информацию вида: {"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;
Как-то можно это победить?
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 и я бы так не стал хранить в постресе данные. мне кажется это уже нереляционная бд получается, когда ты так хранишь данные
Хранение данных - это уже другое, приходится работать с тем, что есть. А по обращению не очень понятно, ведь 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; То без проблем отрабатывает запрос
Обсуждают сегодня