
160
|
第
9
章
9.14
解嵌套复杂数据类型
通过
UNNEST
操作,可以将
8.9.1
节中讨论的复杂集合数据类型展开成关系。对于大数据和
嵌套结构数据类型,这是一个非常强大的功能。通过将数据展开到关系中,你可以更容易
地在查询中访问嵌套在结构中的值。
例如,你存储了一些访问控制策略,并希望查询这些策略。首先,我们有一个用户,他可
以与一个或多个角色关联,而一个角色可以与一个或多个权限集关联。也许这些逻辑是由
schema
定义的,像下面这样:
SELECT * FROM permissions;
user | roles
--------+----------------------------------------------
matt | [[WebService_ReadWrite, Storage_ReadWrite],
[Billing_Read]]
martin | [[WebService_ReadWrite, Storage_ReadWrite],
[Billing_ReadWrite, Audit_Read]]
(2 rows)
我们可以通过使用
UNNEST
来展开每个角色,然后与用户关联:
SELECT user, t.roles
FROM permissions,
UNNEST(permissions.roles) AS t(roles);
user | roles
--------+------------------------------------------- ...