gelöst:Funktion Setof als Tabelle ausgeben um min/max nutzen zukönnen

Hallo Forum,
ich habe eine Tabelle t1 mit Geometrien und führe folgende Funktion aus:

Select min(ST_Z(geom)) from t1;

Als Resultat erhalte ich das kleinste Z.

Nun ist das leider nur ein Beispiel um das Problem besser darstellen zu können, denn:

CREATE OR REPLACE FUNCTION public.get3dpoints(poly geometry)
    RETURNS SETOF geometry
    LANGUAGE 'plpgsql'
AS $BODY$
DECLARE
 r RECORD;
 l geometry;
BEGIN
    FOR r IN
		Select geomvalue from allpoints(poly) --Returns select statement result
	LOOP
	    Select into l interpolateZ(r.geomvalue); --returns only the geometry
		RETURN NEXT l;
	END LOOP;
END;
$BODY$;

liefert eine Liste von Geometrien.

Select geomvalue from allpoints(poly)

splitet eine Geometrie in alle Punkte auf und gibt mir eine Liste mit Geometrien zurück, mit deren Hilfe ich auch den kleinsten Wert herausbekomme.

Select into l interpolateZ(r.geomvalue);

Erzeugt mir aus 2D Koordinaten und einem 3D Polygon, den fehlenden Z Wert.

Die daraus entstandene Liste:

“9.54710000000801”
“9.05679999999981”
“9.0784999999993”
“9.06999999997276”
“9.13009999998682”
“9.12579999996163”
“9.54710000000801”

kann ich leider nicht mit min oder max intensiver abfragen:

Aufrufe von Aggregatfunktionen können keine Aufrufe von Funktionen mit Ergebnismenge enthalten

Daher hier meine Frage, wie kann ich den obigen Spaß als Tabelle ausgeben, damit Funktionen wie min und max weiterhin funktionieren.
Ich denke das Problem ist, dass die Geometrie nur häppchenweise ausgegeben wird, da in jedem Schleifendurchlauf ein l ausgegeben wird. Ich habe mit RETURN QUERY schon viel versucht, bin aber immer daran gescheitert das l in die temporare tabelle zu stecken.
beste Grüße
Balli

Während des Absendens ist mir noch eine Idee gekommen:

Lösung:

CREATE OR REPLACE FUNCTION public.get3dpoints(poly geometry)
    RETURNS table(geoms geometry)
    LANGUAGE 'plpgsql'
AS $BODY$
DECLARE
 r RECORD;
 l geometry;
BEGIN
	drop table t1;
	create temporary table t1 (geom geometry);
    FOR r IN
		Select geomvalue from allpoints(poly) --Returns select statement result
	LOOP
	    Select into l interpolateZ(r.geomvalue); --returns only the geometry
		insert into t1 values (l);
		--INSERT l into t1;
	END LOOP;
	RETURN QUERY 
	Select * from t1;
END;
$BODY$;