]> git.openstreetmap.org Git - nominatim.git/commitdiff
Added check for hstore extension
authorRobbe Haesendonck <googleit@inuits.eu>
Thu, 21 Sep 2023 10:20:46 +0000 (12:20 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Thu, 7 Dec 2023 08:04:33 +0000 (09:04 +0100)
nominatim/db/connection.py
nominatim/tools/database_import.py
nominatim/version.py

index fce897bc7250c814d6679188a5c6281a8ac3790c..12fc22d46841486c047cf341538ff81b5413cf3f 100644 (file)
@@ -174,6 +174,24 @@ class Connection(psycopg2.extensions.connection):
 
         return (int(version_parts[0]), int(version_parts[1]))
 
+    def hstore_version_tuple(self) -> Tuple[int, int]:
+        """ Return the hstore version installed in the database as a
+            tuple of (major, minor). Assumes that the hstore extension
+            has been installed already.
+        """
+        with self.cursor() as cur:
+            version = cur.scalar(
+                'SELECT extversion FROM pg_extension WHERE extname = %s',
+                ('hstore')
+            )
+
+        version_parts = version.split('.')
+        if len(version_parts) < 2:
+            raise UsageError(f"Error fetching hstore version. Bad format: {version}")
+
+        return (int(version_parts[0]), int(version_parts[1]))
+
+
 class ConnectionContext(ContextManager[Connection]):
     """ Context manager of the connection that also provides direct access
         to the underlying connection.
index dbbb196eede15a42283793deb9194b8669f72a93..82bdd5ed9cd0431812065135925dd5313108e79b 100644 (file)
@@ -23,7 +23,7 @@ from nominatim.db.async_connection import DBConnection
 from nominatim.db.sql_preprocessor import SQLPreprocessor
 from nominatim.tools.exec_utils import run_osm2pgsql
 from nominatim.errors import UsageError
-from nominatim.version import POSTGRESQL_REQUIRED_VERSION, POSTGIS_REQUIRED_VERSION
+from nominatim.version import POSTGRESQL_REQUIRED_VERSION, POSTGIS_REQUIRED_VERSION, HSTORE_REQUIRED_VERSION
 
 LOG = logging.getLogger()
 
@@ -47,6 +47,9 @@ def check_existing_database_plugins(dsn: str):
         _require_version('PostGIS',
                          conn.postgis_version_tuple(),
                          POSTGIS_REQUIRED_VERSION)
+        _require_version('hstore',
+                         conn.hstore_version_tuple(),
+                         HSTORE_REQUIRED_VERSION)
 
 
 def setup_database_skeleton(dsn: str, rouser: Optional[str] = None) -> None:
index 95420b341f33f6c8dd3a2a95efd20b06ec785b29..aef85300aaee1aff069bfa28f456d00bb2dbb0ea 100644 (file)
@@ -38,6 +38,7 @@ NOMINATIM_VERSION = NominatimVersion(4, 3, 0, 0)
 
 POSTGRESQL_REQUIRED_VERSION = (9, 6)
 POSTGIS_REQUIRED_VERSION = (2, 2)
+HSTORE_REQUIRED_VERSION = (1, 3)
 
 # Cmake sets a variable @GIT_HASH@ by executing 'git --log'. It is not run
 # on every execution of 'make'.