我目前正在编写一个与行数组一起使用的函数。我需要将值写入数组中特定行的特定列。以下代码应该封装我遇到的问题。
drop type if exists test_type;
create type test_type as (
some_int int
);
create or replace function test()
returns void as
$$
declare
x test_type[];
y test_type;
begin
x[1] = row(1);
y = row(1);
/* DOESN'T WORK */
/* ERROR: syntax error at or near "." */
/* x[1].some_int = 2; */
/* HOWEVER, THIS WORKS */
y = x[1];
y.some_int = 2;
x[1] = y;
raise notice '%', x[1].some_int;
end;
$$
language plpgsql;
如您所见,引用x[1].some_int
在大多数情况下是完全合法的,但不适用于赋值。变通方法实现了目标;但是,它通过赋值运算符涉及两个额外的副本。是否有任何解释为什么这是一个错误或如何解决它并在不创建额外行副本的情况下完成此任务?
是的,数组函数库中缺少此功能。它相当奇特,通常会使用(临时)表而不是行数组进行操作。
也就是说,有一种方法可以使用hstore
#=
运算符进行单个赋值:db<>在这里摆弄
必须安装附加模块 hstore。深入解释: