Опять же, спросите Postgres. Расширение процедуры для вашего предыдущего вопроса:
CREATE TEMP TABLE pencil_count (
pencil_color varchar(30)
, count integer
);
CREATE TABLE pencil_count_with_date (
date_ date,
pencil_count pencil_count[]
);
CREATE TABLE pencils (
id serial
, pencils_ pencil_count_with_date[]
);
Спросите Postgres для каждого вложенного уровня:
INSERT INTO pencil_count VALUES ('red' , 1), ('blue', 2);
SELECT ARRAY(SELECT p FROM pencil_count p)::text AS p_row_arr;
-- with result from above:
INSERT INTO pencil_count_with_date(date_, pencil_count)
VALUES ('2016-04-14', '{"(red,1)","(blue,2)"}')
, ('2016-04-14', '{"(red,3)","(blue,4)"}');
SELECT ARRAY(SELECT p FROM pencil_count_with_date p)::text AS p2_row_arr;
-- with result from above:
INSERT INTO pencils(pencils_)
VALUES
('{"(2016-04-14,\"{\"\"(red,1)\"\",\"\"(blue,2)\"\"}\")"
,"(2016-04-15,\"{\"\"(red,3)\"\",\"\"(blue,4)\"\"}\")"}');
SELECT id, pencils_::text FROM pencils;
Результат:
id | pencils_
---+-------------------------------------------------------
1 | {"(2016-04-14,\"{\"\"(red,1)\"\",\"\"(blue,2)\"\"}\")"
,"(2016-04-15,\"{\"\"(red,3)\"\",\"\"(blue,4)\"\"}\")"}
SQL Fiddle.
Я полностью согласен с советом: несколько уровней вложенных типов строк обычно сложны и неэффективны. Рассмотрим нормализацию.
Подробнее в моем ответе на ваш предыдущий вопрос:
person
Erwin Brandstetter
schedule
14.03.2016
;
к вашим первым двум командам. DDL тоже нуждается в точках с запятой... - person wildplasser   schedule 14.03.2016array[...]
, это все упрощает. (2) Разве это не то же самое, что ваш другой недавний вопрос? - person mu is too short   schedule 14.03.2016