Hi Magnus,

You are correct, that old (dirty) trick of using OIDs as the unique id column, for MapServer, is no longer possible since the PostgreSQL 12.x release. (using that trick is party my fault, for promoting it, for so long)

So I was in the same boat as you, how to handle this with so many client databases with gazillions of records. Here are some important points that I now follow personally:

- for tables that do not have a unique column, or "gid" etc, I generate a new "unique_id" column, such as:

  ALTER TABLE mytable ADD COLUMN unique_id SERIAL PRIMARY KEY;

- then I change in the mapfile PostGIS layer:

  DATA "geom FROM mydata USING UNIQUE unique_id USING SRID=3857"

- I was also concerned about what happens when restoring a dump (that contains OIDs, from an old version) into a PostgreSQL >=12, but I've done that so many times now that I can confidently tell you that there is one single warning displayed during the restore, and then the database is restored properly into PostgreSQL (without OIDs). I do this on production databases, it works well.

Hope that helps a little.

-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@db ERROR:  column "oid" does not exist at character 70 2021-07-08 08:05:45.756 UTC [2270616] user_name@db HINT: Perhaps you meant to reference the column "[table_name].gid". 2021-07-08 08:05:45.756 UTC [2270616] user_name@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
[email protected]
https://lists.osgeo.org/mailman/listinfo/mapserver-users

Reply via email to