[mapserver-users] OIDS in postgresql Postgis

Jeff McKenna jmckenna at gatewaygeomatics.com
Fri Jul 9 07:27:33 PDT 2021


Hi Magnus,

This morning I did more testing on this, and discovered in the source 
code that MapServer still does in fact fallback to looking for an OID 
column, when no unique ID column is found (or specified in the DATA 
statement).  I've filed the ticket at 
https://github.com/MapServer/MapServer/issues/6367 (and EvenR has 
already applied a fix for this [very elegantly checking PG version 
before relying on OIDs as fallback] at 
https://github.com/MapServer/MapServer/pull/6368).  It would be great if 
you can test the fix locally and give feedback.

I've also added a note and warning about OIDs and unique IDs at 
https://mapserver.org/input/vector/postgis.html

So, now that I understand the issue, here is a very important point:

- for every PostGIS layer in my MapServer mapfile, I always specify a 
unique ID column with the "using unique" syntax, in the DATA statement
- that avoids any issue (such as your case, where you likely did not 
specify a unique ID column, and MapServer tried to guess)
- (and of course, I no longer use OIDs in my DATA statements, as these 
were removed in PostgreSQL 12.0)

Thanks again Magnus for this report, you spawned some great changes to 
both the source code and documentation!

-jeff



-- 
Jeff McKenna
GatewayGeo: Developers of MS4W, MapServer Consulting and Training
co-founder of FOSS4G
http://gatewaygeo.com/




On 2021-07-08 5:54 a.m., Magnus Askaner wrote:
> Support for OIDS has been dropped from Postgresql in recent versions.
> After postgresql upgrade, trying to select a feature from a Postgis 
> postgresql table gives an error  in postgresql logs: (sensitive info 
> redacted)
> 
>> 2021-07-08 08:05:45.756 UTC [2270616] user_name at db ERROR:  column 
>> "oid" does not exist at character 70
>> 2021-07-08 08:05:45.756 UTC [2270616] user_name at db HINT: Perhaps you 
>> meant to reference the column "[table_name].gid".
>> 2021-07-08 08:05:45.756 UTC [2270616] user_name at db STATEMENT: select 
>> "[column_name]"::text,ST_AsBinary(ST_Force2D("the_geom"),'NDR') as 
>> geom,"oid"::text from [table_name] where "the_geom" && 
>> ST_GeomFromText('POLYGON(([....]))',find_srid('','[table_name]','the_geom')) 
>> and ([column_name]='value')
> 
> It seems like mapserver still tries to look up oids.
>  From earlier documentation I have got the impression that mapserver 
> depends on oids when selecting from a postgis table.
> Could this be avoided?
> 
> Calling mapserv cgi with wget gives "Missing Schema".
> The connection string works.
> 
> Versions:
> $ mapserv -v
> MapServer version 7.4.3 OUTPUT=PNG OUTPUT=JPEG OUTPUT=KML SUPPORTS=PROJ 
> SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=CAIRO SUPPORTS=SVG_SYMBOLS 
> SUPPORTS=RSVG SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER 
> SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT 
> SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=FASTCGI 
> SUPPORTS=THREADS SUPPORTS=GEOS SUPPORTS=PBF INPUT=JPEG INPUT=POSTGIS 
> INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE
> 
> Postgreql:
> version(): PostgreSQL 12.7 (Ubuntu 12.7-0ubuntu0.20.04.1) on 
> x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 
> 9.3.0, 64-bit
> POSTGIS_full_version() : POSTGIS="3.0.0 r17983" [EXTENSION] PGSQL="120" 
> GEOS="3.8.0-CAPI-1.13.1 " PROJ="6.3.1" LIBXML="2.9.4" LIBJSON="0.13.1" 
> LIBPROTOBUF="1.3.3" WAGYU="0.4.3 (Internal)"
> 
> _______________________________________________
> mapserver-users mailing list
> mapserver-users at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/mapserver-users
> 



More information about the mapserver-users mailing list