[gdal-dev] Invalid search_path created in ogrpgdatasource.cpp

Even Rouault even.rouault at spatialys.com
Wed Oct 9 13:12:39 PDT 2024


Darren,

thanks for the report. I could indeed reproducing setting first an empty 
search path (single quote single quote)

alter role {my_user_name} set search_path='';

Fix in https://github.com/OSGeo/gdal/pull/10980

Even

Le 09/10/2024 à 21:18, Boss, Darren WLRS:EX via gdal-dev a écrit :
>
> I have a Python back-end that uses gdal.Warp to clip a GeoTiff using a 
> geometry from a Postgres 14 (with PostGIS) table. I set up the 
> gdal.warpOptions and pass them into gdal.warp as follows:
>
> DB_READ_STRING = 
> "postgresql://{read_user}:{postgres_password}@{postgres_read_host}:{postgres_port}/{postgres_database}"
>
> warp_options = gdal.WarpOptions(format="GTiff", 
> cutlineDSName=DB_READ_STRING, cutlineSQL=f"SELECT geom FROM my_table 
> WHERE id=1", cropToCutline=True)
>
> res = gdal.Warp(output_path, my_raster, options=warp_options)
>
> This has been working great with gdal 3.4 in a K8s cluster running in 
> a private cloud using an Ubuntu 20 base image. I’m in the process of 
> updating to an Ubuntu 24 LTS image which will be using gdal 3.8.4 and 
> running into problems where the table name (my_table) in the 
> cutlineSQL can’t be found. The problem seems to be related to the 
> search_path and the changes made in this PR: 
> https://github.com/OSGeo/gdal/pull/8642
>
> I turned ON the CPL_DEBUG flag and see the following when trying to 
> perform the warp:
>
> PG: Client encoding: 'UTF8'
>
> PG: PostGIS schema: 'public'
>
> PG: Modifying search_path from "" to '',"",'public'
>
> PG: Command "SET search_path='',"",'public'" failed. Trying without 
> 'public'.
>
> I managed to narrow down the source of the issue and workaround the 
> problem but I think there is room for improvement in gdal.
>
> I narrowed the problem down to ogrpgdatasource.cpp which executes a 
> query (SHOW search_path) to retrieve the search_path. In my case the 
> search_path being returned was an empty string (or maybe it was a 
> string containing a pair of double quotes like ‘””’ or NULL, I’m not 
> sure). The code in ogrpgdatasource.cpp would then create a new 
> search_path with three comma separated values: ‘’, “”, public. Gdal 
> then tries to set this as the search_path and postgres complains about 
> the empty string with double quotes.
>
> SET search_path=‘’,“”,public
>
> ERROR:  zero-length delimited identifier at or near """"
>
> It looks like the issue stemmed from the fact that the user specified 
> in the connection string does not have an associated schema. The 
> workaround in my case was to create a matching schema and explicitly 
> set the search path for my user to “$user”,public. Simply setting the 
> search_path to $user/public for my role or user was insufficient, I 
> needed the schema and also had to grant usage on the new schema to the 
> appropriate role. Setting the search path on the database was also 
> insufficient to resolve the issue. Here’s the debug output now:
>
> PG: Client encoding: 'UTF8'
>
> PG: PostGIS schema: 'public'
>
> PG: Modifying search_path from "$user", public to '',"$user", public
>
> So yes, there was likely a configuration issue in my crunchyDB 
> cluster, but my question is, would gdal’s creation of an invalid 
> search_path with the inclusion of an empty, double quoted string be 
> considered a bug from your point-of-view? The empty, single quoted 
> string that gdal adds to the search_path also seems odd but doesn’t 
> appear to cause any issues.
>
> I’m happy to create a new issue in GitHub if you feel this is an issue.
>
> Thanks,
>
> Darren Boss
>
> Lead Full Stack Developer, Development & Digital Services
>
> Water, Land & Resource Stewardship | NRIDS
>
> Darren.Boss at gov.bc.ca <mailto:Darren.Boss at gov.bc.ca>
>
>
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/gdal-dev

-- 
http://www.spatialys.com
My software is free, but my time generally not.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20241009/88b58775/attachment-0001.htm>


More information about the gdal-dev mailing list