Added check for hstore extension

This commit is contained in:
Robbe Haesendonck
2023-09-21 12:20:46 +02:00
committed by Sarah Hoffmann
parent 38369ca3cf
commit d4018f2e3b
3 changed files with 23 additions and 1 deletions

View File

@@ -174,6 +174,24 @@ 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.
"""
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]): class ConnectionContext(ContextManager[Connection]):
""" Context manager of the connection that also provides direct access """ Context manager of the connection that also provides direct access
to the underlying connection. to the underlying connection.

View File

@@ -23,7 +23,7 @@ from nominatim.db.async_connection import DBConnection
from nominatim.db.sql_preprocessor import SQLPreprocessor from nominatim.db.sql_preprocessor import SQLPreprocessor
from nominatim.tools.exec_utils import run_osm2pgsql from nominatim.tools.exec_utils import run_osm2pgsql
from nominatim.errors import UsageError 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() LOG = logging.getLogger()
@@ -47,6 +47,9 @@ def check_existing_database_plugins(dsn: str):
_require_version('PostGIS', _require_version('PostGIS',
conn.postgis_version_tuple(), conn.postgis_version_tuple(),
POSTGIS_REQUIRED_VERSION) POSTGIS_REQUIRED_VERSION)
_require_version('hstore',
conn.hstore_version_tuple(),
HSTORE_REQUIRED_VERSION)
def setup_database_skeleton(dsn: str, rouser: Optional[str] = None) -> None: def setup_database_skeleton(dsn: str, rouser: Optional[str] = None) -> None:

View File

@@ -38,6 +38,7 @@ NOMINATIM_VERSION = NominatimVersion(4, 3, 0, 0)
POSTGRESQL_REQUIRED_VERSION = (9, 6) POSTGRESQL_REQUIRED_VERSION = (9, 6)
POSTGIS_REQUIRED_VERSION = (2, 2) POSTGIS_REQUIRED_VERSION = (2, 2)
HSTORE_REQUIRED_VERSION = (1, 3)
# Cmake sets a variable @GIT_HASH@ by executing 'git --log'. It is not run # Cmake sets a variable @GIT_HASH@ by executing 'git --log'. It is not run
# on every execution of 'make'. # on every execution of 'make'.