bstroebl / xplanPostGIS

Implementation of German standard XPlanung for PostgreSQL/PostGIS
GNU General Public License v2.0
8 stars 7 forks source link

fehlerhaftes SQL in Schema "FP_Gemeinbedarf_Spiel_und_Sportanlagen" #10

Closed swen100 closed 4 years ago

swen100 commented 4 years ago

Hallo Herr Ströbl,

während der Arbeit in QGIS wurde mir eine Python-Fehlermeldung angezeigt:

Traceback (most recent call last):
  File "C:/Users/swenz/.qgis2/python/plugins\xplanung\XPlan.py", line 1580, in bereichLaden
    displayName = displayName, filter = filter)
  File "C:/Users/swenz/.qgis2/python/plugins\xplanung\XPlan.py", line 908, in loadTable
    whereClause = filter,  intoDdGroup = False)
  File "C:/Users/swenz/.qgis2/python/plugins\DataDrivenInputMask\ddmanager.py", line 745, in loadPostGISLayer
    QtGui.QApplication.UnicodeUTF8) + ddTable.schemaName + "." + ddTable.tableName,  fatal = True,  iface = self.iface)
  File "C:/Users/swenz/.qgis2/python/plugins\DataDrivenInputMask\dderror.py", line 37, in __init__
    raise FatalError(value)
FatalError: u'Kann folgende Tablle nicht laden: FP_Gemeinbedarf_Spiel_und_Sportanlagen.FP_SpielSportanlageFlaeche_qv'

Ich habe mir daraufhin einmal das zugehörige SQL zu den Views angesehen. In PGAdmin erhalte ich dabei ff. Fehlermeldungen:

ERROR: FEHLER:  Spalte »FP_SpielSportanlage_gid« existiert nicht
LINE 1: SELECT "FP_SpielSportanlage_gid", "FP_SpielSportanlage_gid",...
               ^
QUERY:  SELECT "FP_SpielSportanlage_gid", "FP_SpielSportanlage_gid", zweckbestimmung FROM "FP_Gemeinbedarf_Spiel_und_Sportanlagen"."FP_Gemeinbedarf_zweckbestimmung" ORDER BY 1,3

Das sieht für mich so aus, als wenn der Fehler im View "FP_SpielSportanlage_qv" liegt, da es dort heißt:

crosstab('SELECT "FP_SpielSportanlage_gid", "FP_SpielSportanlage_gid", zweckbestimmung
    FROM "FP_Gemeinbedarf_Spiel_und_Sportanlagen"."FP_Gemeinbedarf_zweckbestimmung" ORDER BY 1,3'::text) zt(zgid bigint, z1 integer, z2 integer, z3 integer, z4 integer) ON g.gid = zt.zgid;

es muss aber wahrscheinlich heißen:

crosstab('SELECT "FP_Gemeinbedarf_gid", "FP_Gemeinbedarf_gid", zweckbestimmung
    FROM "FP_Gemeinbedarf_Spiel_und_Sportanlagen"."FP_Gemeinbedarf_zweckbestimmung" ORDER BY 1,3'::text) zt(zgid bigint, z1 integer, z2 integer, z3 integer, z4 integer) ON g.gid = zt.zgid;

Dann klappts wieder.

Also statt "FP_SpielSportanlage_gid" -> "FP_Gemeinbedarf_gid".

bstroebl commented 4 years ago

Hallo, danke für den Hinweis. Ihr Fix ist leider nicht zielführend, er beseitigt zwar den Fehler aber das Ergebnis ist falsch.