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.
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()
_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:
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'.