Arrays 从复合类型数组中获取第一个值

Arrays 从复合类型数组中获取第一个值,arrays,postgresql,postgresql-9.4,Arrays,Postgresql,Postgresql 9.4,person\u数组包含添加的person\u的组合类型。我需要在这个数组中获取日期。(2016-02-27和2016-03-27) 我想我需要使用slice,但它对我不起作用 您可以使用将数组转换为一组行: CREATE TABLE people( name_ varchar(50) NOT NULL, count int NOT NULL DEFAULT 0 ); CREATE TABLE person_added( date_ date NOT NULL, all_people_

person\u数组
包含添加的
person\u的组合类型。我需要在这个数组中获取日期。(2016-02-27和2016-03-27)

我想我需要使用slice,但它对我不起作用

您可以使用将数组转换为一组行:

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)"}
unnest()
函数是一个表函数,因此您可以像使用表名一样使用它。此类表函数可以使用以前指定的关系中的列(请参见上面链接中“横向子查询”一节)

但是你应该认真回顾一下你的桌子设计。使用这样的数组会破坏数据的关系结构。你的设计看起来更像是一个,20世纪60年代的数据库设计范例。不要使用数组,而是使用从一个表到下一个表的键。

您可以使用将数组转换为一组行:

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)"}
unnest()
函数是一个表函数,因此您可以像使用表名一样使用它。此类表函数可以使用以前指定的关系中的列(请参见上面链接中“横向子查询”一节)

但是你应该认真回顾一下你的桌子设计。使用这样的数组会破坏数据的关系结构。你的设计看起来更像是一个,20世纪60年代的数据库设计范例。使用从一个表到下一个表的键,而不是数组