[PostNAS Suite] ALKIS-Import 4.1-23: Datentyp-Problem bei signaturnummer (VARCHAR → INTEGER)
G. Wagner, Wagner-IT
info at wagner-it.de
Fr Okt 17 08:54:23 PDT 2025
Moin,
folgende PostgreSQL-Fehler (falschen Datentyp bei signaturnummer) erhalten ich, wenn ich ein QGIS-Projekt mit den NAS-Daten (ALKIS-Import 4.1-23) über den QGIS-Server nutze. Die „signaturnummer“ sollte wohl INTEGER sein?
Beispielhafte Fehlereinträge in der Log-Datei vom QGIS-Server:
2025-10-17 11:09:05,387 WARNING [94140] Qgis: PostGIS: Query: BEGIN READ ONLY;DECLARE qgis_98 BINARY CURSOR FOR SELECT st_asbinary(st_simplify( st_removerepeatedpoints("line",5.29311), 4.63147, true ),'NDR'),"ogc_fid","signaturnummer"::text FROM "public"."po_lines" WHERE (("line" && st_makeenvelope(401127.04632999998284504,5334679.79271748661994934,415822.03405399998882785,5341640.22814551368355751,25832)) AND (((thema='Politische Grenzen' AND modell && ARRAY['DLKM','DKKM1000']::varchar[] AND (layer NOT LIKE 'ax_flurstueck%'))))) AND ("signaturnummer" IN (2016,2018,2020,2010,2022,2014,2012)) returned 7 [ERROR: operator does not exist: character varying = integer
LINE 1: ... LIKE 'ax_flurstueck%'))))) AND ("signaturnummer" IN (2016,2...
^
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
]
2025-10-17 11:09:05,387 WARNING [94140] Qgis: PostGIS: 1 cursor states lost.
SQL: BEGIN READ ONLY;DECLARE qgis_98 BINARY CURSOR FOR SELECT st_asbinary(st_simplify( st_removerepeatedpoints("line",5.29311), 4.63147, true ),'NDR'),"ogc_fid","signaturnummer"::text FROM "public"."po_lines" WHERE (("line" && st_makeenvelope(401127.04632999998284504,5334679.79271748661994934,415822.03405399998882785,5341640.22814551368355751,25832)) AND (((thema='Politische Grenzen' AND modell && ARRAY['DLKM','DKKM1000']::varchar[] AND (layer NOT LIKE 'ax_flurstueck%'))))) AND ("signaturnummer" IN (2016,2018,2020,2010,2022,2014,2012))
Result: 7 (ERROR: operator does not exist: character varying = integer
LINE 1: ... LIKE 'ax_flurstueck%'))))) AND ("signaturnummer" IN (2016,2...
^
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
)
Hat das schon jemand bemerkt oder tritt das nur bei mir auf?
Könnte signaturnummer direkt als INTEGER statt VARCHAR beim Import angelegt werden?
Mit dem unten genannten Workaround sind die Fehler verschwunden.
Viele Grüße
Günter
WAGNER-IT
Ingenieurbüro für Geoinformatik
Carl-Orff-Weg 7
79312 Emmendingen
Tel.: 07641/9621668
Fax: 07641/915599
<http://www.wagner-it.de/> www.wagner-it.de
----------------------------------------------------------
Analyse der KI:
Umgebung:
* PostgreSQL Version: 16.10
* QGIS Server Version: 3.40.11
* PostGIS Version: 3.4.3
* Norbit Import-Tool: 4.1-23
* Betriebssystem: Ubuntu 24.04 LTS
_____
Problem:
Die Spalte signaturnummer in den Tabellen po_lines, po_points und po_polygons wird als Datentyp character varying (VARCHAR) angelegt.
Aktueller Import:
sql
signaturnummer | character varying
_____
Auswirkung:
QGIS-Server führt Abfragen mit Integer-Werten durch:
sql
SELECT ... FROM po_lines
WHERE signaturnummer IN (2016, 2018, 2020, 2010, 2022, 2014, 2012)
```
Dies führt zu PostgreSQL-Fehlern:
```
ERROR: operator does not exist: character varying = integer
LINE 1: ... AND ("signaturnummer" IN (2016,2018,2020,2010,2022,2014,2012))
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
Folge:
* Rendering-Fehler bei Layer "Politische Grenzen"
* Performance-Einbußen
* Fehlerhafte Darstellung
_____
Lösung:
Die Spalte sollte als Datentyp integer erstellt werden:
sql
signaturnummer | integer
_____
Betroffene Tabellen:
* po_lines.signaturnummer
* po_points.signaturnummer
* po_polygons.signaturnummer
_____
Workaround (manuell nach jedem Import):
sql
ALTER TABLE po_lines
ALTER COLUMN signaturnummer TYPE integer
USING signaturnummer::integer;
ALTER TABLE po_points
ALTER COLUMN signaturnummer TYPE integer
USING signaturnummer::integer;
ALTER TABLE po_polygons
ALTER COLUMN signaturnummer TYPE integer
USING signaturnummer::integer;
REINDEX TABLE po_lines;
REINDEX TABLE po_points;
REINDEX TABLE po_polygons;
Hinweis: Bei po_points können auch Text-Werte wie "pg-gemarkung" vorkommen. Diese müssen vor der Konvertierung auf NULL gesetzt werden:
sql
UPDATE po_points
SET signaturnummer = NULL
WHERE signaturnummer !~ '^[0-9]+$';
_____
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://lists.osgeo.org/pipermail/nas/attachments/20251017/96c69318/attachment-0001.htm>
Mehr Informationen über die Mailingliste NAS