Ich versuche, eine Funktion in PL/pgSQL (Postgres 9.5) zu erstellen (durch dynamische Ausführung einer Abfrage), um einige gewünschte Spalten aus zwei Tabellen (Anzeige und Straße) in PostgreSQL/postgis Datenbank. Tabelle 'ad' enthält 87 Zeilen, während Tabelle 'street' 16.060 Zeilen enthält. Was ich bisher versucht habe, ist durch folgenden Code gegeben. Die Ausführungszeit für diesen Code beträgt 2,9 Sekunden. Mir ist bewusst, dass es viele verschiedene Möglichkeiten gibt, die Ausführungszeit zu verbessern. Hier ist der Code:Rückgabe sowohl der Geometrie als auch anderer Attribute Spalten in PL/pgsql Funktion
Create or Replace Function str_con(ad geometry, street geometry)
Returns Table(address_id integer, address_locations geometry, nearest_streets geometry, traf_speed numeric, street_type character varying) AS $$ Begin
Return Query
Execute 'Select
address_id,
address_locations,
nearest_streets,
traf_speed,
street_type
From
(
Select
ad.gid As address_id,
ad.geom As address_locations,
st.geom As nearest_streets,
st.trafsp As traf_speed,
st.ospmstty As street_type
From
public.ad, public.st
Where ST_DWithin(ad.geom, st.geom, 50.0)
Order By address_id, St_Distance(st.geom, ad.geom)
) As foo'; End; $$ Language 'plpgsql';
Ich rufe die Funktion mit diesem Befehl.
Select str_con(ad.geom, st.geom) from ad
Join st On st.gid = ad.gid;
Die ‚ad‘ zwei Tabellen und ‚Straße‘ hat Geometriespalten sowie andere Informationen von Adressen und Straßen der Region von Interesse. Ich möchte sowohl Geometrie als auch andere Spalten als Ausgabe erhalten. Aber ich bin immer die Ausgabe dieser Funktion Aufruf wie folgt:
ist die Funktion die Datensätze statt fünf gewünschten Spalten zurückgibt, die nicht erforderlich ist. Kann mir bitte jemand sagen, wie man die Spalten der Geometrie und der Attribute aus den Tabellen ad und street zurückgibt?
Vielen Dank! löste mein Problem. –