Postgres 插入一个用户定义类型的数组,其中包含一个数组

Postgres insert an array of an user-defined type with an array inside

提问人:MarcoPSM 提问时间:2/26/2021 更新时间:2/26/2021 访问量:1020

问:

我为长度创建了这个类型:

CREATE TYPE length AS (value numeric, uom text );

然后我创建了一个长度为

CREATE TYPE test_type AS (comp_height length[]);

在此之后,我创建了一个表,其列类型为 test_type array

CREATE TABLE test_table (test_column test_type[]);

现在我无法插入此表。我试过这种方式

insert into test_table (test_column)
values (
    ARRAY[
          ARRAY[(1,'m')::length,
                (20,'m')::length],
          ARRAY[(3,'m')::length,
                (40,'m')::length]
         ]::test_type
        );

但我收到一个投射错误:(

ERROR: cannot cast type length[] to test_type

我感谢任何帮助,谢谢

PostgreSQL 用户定义 复合类型

评论


答:

1赞 S-Man 2/26/2021 #1

演示:db<>fiddle

您必须使用 转换为记录,该记录可以转换为您的新记录length[]ROW()test_type

insert into test_table (test_column)
values (
        ARRAY[   
          ROW(ARRAY[(1,'m')::length, (20,'m')::length])::test_type,
          ROW(ARRAY[(3,'m')::length, (40,'m')::length])::test_type
        ]
);