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

Getting first values from composite type arrays

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)

我想我需要使用切片,但它对我不起作用。

您可以使用 unnest() function 将数组转换为一组行:

SELECT date_
FROM all_people_array_table, unnest(people_array);

unnest() 函数是一个 table 函数,因此您可以像使用 table 名称一样使用它。此类 table 函数可以使用先前指定关系中的列(请参阅上面 link 部分之后的 "LATERAL Subqueries" 部分)。

但是您真的应该检查一下您的 table 设计。像这样使用数组会破坏数据的关系结构。您的设计看起来更像是 hierarchical model,1960 年代的数据库设计范例。不使用数组,而是使用从一个 table 到下一个

的键