CREATE TABLE people(
name_ varchar(50) NOT NULL,
count int NOT NULL DEFAULT 0
);
CREATE TABLE person_added(
date_ date NOT NULL,
all_people_ people[],
all_people_count int NOT NULL
);
CREATE TABLE all_people_array_table(
id SERIAL,
people_array person_added[]
);
{"(2016-02-27,{(Jack,3),(John,6)},1000)","(2016-03-27,{(Ben,3),(Francis,6)},2000)"}
people_array
包含person_added
个复合类型。我需要在这个数组中获取日期。 (2016-02-27和2016-03-27)
我想我需要使用切片,但它对我不起作用。
答案 0 :(得分:0)
您可以使用unnest()
function将数组转换为一组行:
SELECT date_
FROM all_people_array_table, unnest(people_array);
unnest()
函数是一个表函数,因此您可以像使用表名一样使用它。此类表函数可以使用先前指定的关系中的列(请参阅" LATERAL子查询"参见上面链接中的部分)。
但你应该仔细检查你的桌面设计。使用这样的数组会破坏数据的关系结构。您的设计看起来更像是hierarchical model,这是1960年代的数据库设计范例。而不是数组,使用从一个表到下一个表的键。