从 Postgres 中的复合类型数组中进行选择

pre*_*one 2 sql postgresql

我有一个复合型引脚

CREATE TYPE public.pin AS
(
    id uuid,
    name text,
);
Run Code Online (Sandbox Code Playgroud)

和一个桌面设备

CREATE TABLE public.devices
(
    name text COLLATE pg_catalog."default" NOT NULL,
    pins pin[] NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

如何编写查询以从设备表中选择 pin.name,其中 pin.id 等于已知 id?

Mar*_*rth 5

您可以为此使用横向连接:

SELECT pin.name
FROM devices, unnest(pins) AS pin -- implicit lateral join
WHERE pin.id = '77068690-787c-431d-9a6f-bd2a069fa5a4' -- random uuid
Run Code Online (Sandbox Code Playgroud)