gpt4 book ai didi

Postgresql:在 set-returning plpgsql 函数中选择数组的问题

转载 作者:行者123 更新时间:2023-11-29 12:14:36 34 4
gpt4 key购买 nike

我正在尝试在 postgres 8.4 中的 set-returning 函数中选择数组,但收到错误:

“数组值必须以”{“或维度信息”开头

这个问题有时似乎与 locationnodes.rs_people_c 有关有一个空数组。我试图通过 COALESCE 语句来解决这个问题。运气不好。

函数:

CREATE OR REPLACE FUNCTION fn_matview_location_slots (
week_start DATE
) RETURNS setof matview_location_slots_info AS
$$
DECLARE
resulter matview_location_slots_info%ROWTYPE;
BEGIN
FOR resulter IN
SELECT
rs_node AS node,
rs_date AS dater,
...
COALESCE(rs_people_c, '{}'::INTEGER[]) AS people,
rs_location AS location
FROM
locationnodes
WHERE
rs_date >= week_start
LOOP
RETURN NEXT resulter;
END LOOP;
END; $$ LANGUAGE plpgsql;

类型:

CREATE TYPE matview_location_slots_info AS (
node VARCHAR,
dater DATE,
...
people INTEGER[],
location INTEGER[]
);

数据

select rs_people_c from locationnodes;
rs_people_c
-------------------------------------
{}
{}
{731}
{32}
{31}
{}
{62}
{540,72,69,53,37,42,201,51,58}
{64}

最佳答案

我犯了一个愚蠢的类型定义错误(我从我最初的问题中排除了这个错误,但 Grzegorz 提到了——谢谢 Grzegorz)。

我将此发布为对 数组值必须以“{”或维度信息开头 问题进行谷歌搜索的任何人的答案。

在我的例子中,问题是位置返回类型被定义为一个整数数组,但该函数返回一个简单的整数。不幸的是,Postgres 没有提供有关这些情况下特定问题的更多信息。

另请注意,在这种情况下,您不需要像我在问题中所做的那样将 NULL 数组合并为 {}。

简而言之:确保您的数组返回类型正在接收数组输入!

关于Postgresql:在 set-returning plpgsql 函数中选择数组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6917718/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com