【发布时间】:2016-03-24 12:45:10
【问题描述】:
我有一个 postgresql 自定义类型,包含数组
CREATE TYPE route_part (
nodea bigint[],
edgea bigint[],
geom geometry
);
还有一个函数,返回这个类型
CREATE OR REPLACE FUNCTION net.get_route_part_dist(int8, int8, int4)
RETURNS route_part
AS
$BODY$
DECLARE routerec route_part;
BEGIN
SELECT INTO routerec
...
;
RETURN routerec;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
此函数按预期工作并返回route_part 复合类型。
我正在尝试在另一个“包装器”函数中使用它,如下所示:
CREATE OR REPLACE FUNCTION net.get_route(beg_ int8, end_ int8, mida int8[], dist int4)
RETURNS route_part
AS
$BODY$
DECLARE routerec route_part;
BEGIN
SELECT INTO routerec net.get_route_part_dist(beg_, end_, dist);
RETURN routerec;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
我在选择查询时遇到错误。
ERROR: malformed array literal: "(
{303513543,2289605239,...,306687989}","
{2585314,264212,...,1088633}",
0102000020110F000029000000AE47E11A81754F41C3F5280C07F25C)"
DETAIL: Array value must start with "{" or dimension information.
我不会将类型转换为字符串或其他类型,因此我无法弄清楚为什么返回的值被认为具有格式错误的数组。 有什么线索吗?
【问题讨论】:
-
当使用像
SELECT INTO routerec (net.get_route_part_dist(beg_, end_, dist)).nodea, (net.get_route_part_dist(beg_, end_, dist)).edgea, (net.get_route_part_dist(beg_, end_, dist)).geom;这样的构造时,它可以工作,但会增加调用函数三次而不是一次的开销。我确信有一种方法可以返回获取的类型,而无需从部分重构它。 -
您忘记提供您的 Postgres 版本。
标签: sql arrays postgresql plpgsql literals