PL/pgSQL返回查询给出了伪类型记录而不是表

JMc*_*ure 2 postgresql postgis plpgsql

我的第一个PL/pgSQL函数被设计为将几何列作为输入并输出一个fishnet/grid表(对我来说是一个常见的任务).

我不确定在return语句中我做错了什么,因为我正在返回伪类型记录而不是具有不同列的表.

我的代码:

CREATE OR REPLACE FUNCTION ST_Fishnet(
        nrow integer, 
        ncol integer,
        geo_table varchar,
        geom_column varchar)
RETURNS Table( ids text, geom geometry)
AS $$
DECLARE
    collected_geom geometry;
    xmin numeric;
    xmax numeric;
    ymin numeric;
    ymax numeric;
    xsize numeric;
    ysize numeric;
BEGIN
    EXECUTE 'SELECT st_collect("'||$4||'") FROM "'||$3||'"' INTO collected_geom;
    xmax := st_xmin(collected_geom);
    xmin := st_xmax(collected_geom);
    ymin := st_ymin(collected_geom);
    ymax := st_ymax(collected_geom);
    xsize := abs(xmax - xmin) / $2;
    ysize := abs(ymax - ymin) / $1;
    RETURN QUERY 
        SELECT
            i+1||'-'||j+1 as ids,
            ST_Translate(cell, j * xsize + xmax, i * ysize + ymin) AS geom
        FROM 
                generate_series(0, $1 - 1) AS i,
                generate_series(0, $2 - 1) AS j,
                (SELECT ('POLYGON((0 0, 0 '||ysize||', '||xsize||' '||ysize||', '||xsize||' 0,0 0))')::geometry AS cell) AS temp;
END
$$ 
LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

输出应该看起来像一个带有id和geom列的表,但是出来了,而不是像以下那样的伪类型:(1-1,01030000 [...] 40)

阅读了文档,我仍然不确定我做错了什么.

感谢任何指针.

谢谢.

JMc*_*ure 6

弄清楚了.

调用该函数SELECT * FROM ST_Fishnet(rows, columns, geo-table, the_geom)产生了所需的表.