Hey dear lists,Here is a self contained example showing strange behavior from a real life example concerning the use of postgis_topology topogeometry type.The problem is :when trying to return setof topogeometry,the "return query" gives an error of type where there is none, and the return next is working fine.The precise error message is ERROR 42804"ERROR: structure of query does not match function result typeDETAIL: Returned type ttt.fake_topogeometry does not match expected type integer in column 1.CONTEXT: PL/pgSQL function ttt.testtopogeom(ttt.fake_topogeometry) line 9 at RETURN QUERY"Is it ok, postres bug, postgis bug? What are the possible corrections?Here is the self contained code stored in the "ttt" schema.DROP SCHEMA IF EXISTS ttt CASCADE;CREATE SCHEMA ttt;DROP TYPE IF EXISTS ttt.fake_topogeometry CASCADE;CREATE TYPE ttt.fake_topogeometry AS (topology_id integer, layer_id integer, id integer, a_type integer); DROP FUNCTION IF EXISTS ttt.testTopogeom(test_topom ttt.fake_topogeometry); CREATE FUNCTION ttt.testTopogeom(test_topom ttt.fake_topogeometry) RETURNS SETOF ttt.fake_topogeometry AS $BODY$ -- this function is an empty function to test return of multiple topogeom DECLARE the_topo ttt.fake_topogeometry; BEGIN RETURN NEXT (1,1,1,1)::ttt.fake_topogeometry; --RETURN NEXT (3,3,3,3)::ttt.fake_topogeometry; RETURN QUERY SELECT (1,1,1,1)::ttt.fake_topogeometry as foo; -- UNION --SELECT (3,3,3,3)::ttt.fake_topogeometry as foo RETURN ; END ; $BODY$ LANGUAGE plpgsql IMMUTABLE; SELECT * FROM ttt.testTopogeom((2,2,2,2)::ttt.fake_topogeometry);_______________________________________________ postgis-users mailing listpostgis-users@lists.osgeo.orghttp://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
"ERROR: structure of query does not match function result typeDETAIL: Returned type ttt.fake_topogeometry does not match expected type integer in column 1.CONTEXT: PL/pgSQL function ttt.testtopogeom(ttt.fake_topogeometry) line 9 at RETURN QUERY"
DROP SCHEMA IF EXISTS ttt CASCADE;CREATE SCHEMA ttt;DROP TYPE IF EXISTS ttt.fake_topogeometry CASCADE;CREATE TYPE ttt.fake_topogeometry AS (topology_id integer, layer_id integer, id integer, a_type integer); DROP FUNCTION IF EXISTS ttt.testTopogeom(test_topom ttt.fake_topogeometry); CREATE FUNCTION ttt.testTopogeom(test_topom ttt.fake_topogeometry) RETURNS SETOF ttt.fake_topogeometry AS $BODY$ -- this function is an empty function to test return of multiple topogeom DECLARE the_topo ttt.fake_topogeometry; BEGIN RETURN NEXT (1,1,1,1)::ttt.fake_topogeometry; --RETURN NEXT (3,3,3,3)::ttt.fake_topogeometry; RETURN QUERY SELECT (1,1,1,1)::ttt.fake_topogeometry as foo; -- UNION --SELECT (3,3,3,3)::ttt.fake_topogeometry as foo RETURN ; END ; $BODY$ LANGUAGE plpgsql IMMUTABLE; SELECT * FROM ttt.testTopogeom((2,2,2,2)::ttt.fake_topogeometry);
pgsql-general by date:
Соглашаюсь с условиями обработки персональных данных