[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