【问题标题】:Assigning values to composite array elements为复合数组元素赋值
【发布时间】:2026-01-25 08:50:01
【问题描述】:

我创建了如下类型。

create type test_typ as (id int, nam text, age int);

我创建了一个 test_typ 类型的数组,并尝试为每个元素分配值,如下所示

do
$$
declare
tt test_typ[];
begin
tt[1].id = 1;
tt[1].nam = 'sds';
tt[1].age = 23;
end;
$$
language plpgsql;

执行上述操作时出现语法错误。但是当我执行以下操作并尝试打印tt[1].id 时,它会正确打印该值。

do
$$
declare
tt test_typ[];
begin
tt[1] := (1,'sds',23);
raise notice '%', tt[1].id;
end;
$$
language plpgsql;

如果我尝试相同的方式打印,为什么没有分配tt[1].idtt[1].namtt[1].age

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    根据PostgreSQL documentation

    目标变量可以是简单变量(可选地用块名称限定)、行或记录变量的字段,或者是简单变量或字段的数组元素。

    所以在赋值操作中似乎不支持复合类型的数组。

    Pavel Stehule 回答了一个类似的question,您可能会觉得有帮助。

    【讨论】: