]> git.openstreetmap.org Git - nominatim.git/commitdiff
Added check to see if hstore is loaded
authorRobbe Haesendonck <googleit@inuits.eu>
Mon, 25 Sep 2023 10:39:38 +0000 (12:39 +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 12fc22d46841486c047cf341538ff81b5413cf3f..51110f54f459987da7227cc586084222ae61bd3c 100644 (file)
@@ -174,22 +174,13 @@ class Connection(psycopg2.extensions.connection):
 
         return (int(version_parts[0]), int(version_parts[1]))
 
 
         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.
+
+    def extension_loaded(self, extension_name: str) -> bool:
+        """ Return True if the hstore extension is loaded in the database.
         """
         with self.cursor() as cur:
         """
         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]))
+            cur.execute('SELECT extname FROM pg_extension WHERE extname = %s', (extension_name))
+            return cur.rowcount > 0
 
 
 class ConnectionContext(ContextManager[Connection]):
 
 
 class ConnectionContext(ContextManager[Connection]):
index 1f39f38154db0c565814e5057cfdfcde9972bfd2..210864734ea29709b655c00e9868763d48281730 100644 (file)
@@ -24,8 +24,7 @@ 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, \
 from nominatim.tools.exec_utils import run_osm2pgsql
 from nominatim.errors import UsageError
 from nominatim.version import POSTGRESQL_REQUIRED_VERSION, \
-                              POSTGIS_REQUIRED_VERSION, \
-                              HSTORE_REQUIRED_VERSION
+                              POSTGIS_REQUIRED_VERSION
 
 LOG = logging.getLogger()
 
 
 LOG = logging.getLogger()
 
@@ -40,6 +39,13 @@ def _require_version(module: str, actual: Tuple[int, int], expected: Tuple[int,
         raise UsageError(f'{module} is too old.')
 
 
         raise UsageError(f'{module} is too old.')
 
 
+def _require_loaded(extension_name: str, conn: Connection):
+    """ Check that the given extension is loaded. """
+    if not conn.extension_loaded(extension_name):
+        LOG.fatal('Required module %s is not loaded.', extension_name)
+        raise UsageError(f'{extension_name} is not loaded.')
+
+
 def check_existing_database_plugins(dsn: str):
     """ Check that the database has the required plugins installed."""
     with connect(dsn) as conn:
 def check_existing_database_plugins(dsn: str):
     """ Check that the database has the required plugins installed."""
     with connect(dsn) as conn:
@@ -49,9 +55,7 @@ def check_existing_database_plugins(dsn: str):
         _require_version('PostGIS',
                          conn.postgis_version_tuple(),
                          POSTGIS_REQUIRED_VERSION)
         _require_version('PostGIS',
                          conn.postgis_version_tuple(),
                          POSTGIS_REQUIRED_VERSION)
-        _require_version('hstore',
-                         conn.hstore_version_tuple(),
-                         HSTORE_REQUIRED_VERSION)
+        _require_loaded('hstore', conn)
 
 
 def setup_database_skeleton(dsn: str, rouser: Optional[str] = None) -> None:
 
 
 def setup_database_skeleton(dsn: str, rouser: Optional[str] = None) -> None:
index aef85300aaee1aff069bfa28f456d00bb2dbb0ea..95420b341f33f6c8dd3a2a95efd20b06ec785b29 100644 (file)
@@ -38,7 +38,6 @@ NOMINATIM_VERSION = NominatimVersion(4, 3, 0, 0)
 
 POSTGRESQL_REQUIRED_VERSION = (9, 6)
 POSTGIS_REQUIRED_VERSION = (2, 2)
 
 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'.
 
 # Cmake sets a variable @GIT_HASH@ by executing 'git --log'. It is not run
 # on every execution of 'make'.