failure to start picture-worker on 2.11 with pictures.geom geometry type issue
probably somehow linked to !466 (merged), deploying 2.11 on a fresh db, i fail to start the picture worker:
2025-12-26 10:19:14,037 [MainThread][INFO] geovisio.picture_grid: Refreshing database
2025-12-26 10:19:14,074 [MainThread][ERROR] geovisio.runner_pictures: Exiting thread
Traceback (most recent call last):
File "/home/panoramax/pano-api/geovisio/workers/runner_pictures.py", line 328, in process_jobs
self.check_periodic_tasks()
~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/home/panoramax/pano-api/geovisio/workers/runner_pictures.py", line 366, in check_periodic_tasks
if not self.refresh_database():
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/panoramax/pano-api/geovisio/workers/runner_pictures.py", line 392, in refresh_database
return utils.sequences.update_pictures_grid()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/home/panoramax/pano-api/geovisio/utils/sequences.py", line 713, in update_pictures_grid
conn.execute("REFRESH MATERIALIZED VIEW CONCURRENTLY pictures_grid")
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/panoramax/pano_venv/lib/python3.13/site-packages/psycopg/connection.py", line 299, in execute
raise ex.with_traceback(None)
psycopg.errors.InternalError_: column "public"."pictures"."geom" must be a geometry or geography
it reproduced with the sql query on the db itself, so its not a python issue:
panoramax=> refresh materialized view concurrently pictures_grid;
ERROR: column "public"."pictures"."geom" must be a geometry or geography
i've tried various things (removing/adding the public param from the MV creation query) and now i can manually run the refresh materialized view in a psql shell, but the picture worker still fails to start with the same traceback. i've tried fiddling with search_path but that didnt help:
conn.execute("SET search_path='public'; REFRESH MATERIALIZED VIEW CONCURRENTLY pictures_grid")
that's on psql 17/postgis 3.5.2 from debian 13. istr there was a default schema behaviour change in a major psql version, but i cant recall right now.
the query on the extent estimate also manually works:
panoramax=> select st_estimatedextent('public','pictures','geom');
st_estimatedextent
-----------------------------------------------------------------------------
BOX(2.803513050079346 45.72449493408203,2.803513288497925 45.7244987487793)
the db url is set in the flask env, without a specific schema:
DB_URL="postgres://panoramax:panoramax@localhost/panoramax"
the panoramax db user can access the geometry_columns table (which belongs to postgres db user):
panoramax=> select * from geometry_columns ;
f_table_catalog | f_table_schema | f_table_name | f_geometry_column | coord_dimension | srid | type
-----------------+----------------+----------------+-------------------+-----------------+------+-----------------
panoramax | public | pictures_grid | geom | 2 | 0 | GEOMETRY
panoramax | public | pictures | geom | 2 | 4326 | POINT
panoramax | public | sequences | geom | 2 | 4326 | MULTILINESTRING
panoramax | public | excluded_areas | geom | 2 | 4326 | MULTIPOLYGON