mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-26 11:08:13 +00:00
Added check to see if hstore is loaded
This commit is contained in:
committed by
Sarah Hoffmann
parent
e7b8e1a2c2
commit
e8b866aa88
@@ -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
|
def extension_loaded(self, extension_name: str) -> bool:
|
||||||
tuple of (major, minor). Assumes that the hstore extension
|
""" Return True if the hstore extension is loaded in the database.
|
||||||
has been installed already.
|
|
||||||
"""
|
"""
|
||||||
with self.cursor() as cur:
|
with self.cursor() as cur:
|
||||||
version = cur.scalar(
|
cur.execute('SELECT extname FROM pg_extension WHERE extname = %s', (extension_name))
|
||||||
'SELECT extversion FROM pg_extension WHERE extname = %s',
|
return cur.rowcount > 0
|
||||||
('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]):
|
||||||
|
|||||||
@@ -24,8 +24,7 @@ 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, \
|
from nominatim.version import POSTGRESQL_REQUIRED_VERSION, \
|
||||||
POSTGIS_REQUIRED_VERSION, \
|
POSTGIS_REQUIRED_VERSION
|
||||||
HSTORE_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):
|
def check_existing_database_plugins(dsn: str):
|
||||||
""" Check that the database has the required plugins installed."""
|
""" Check that the database has the required plugins installed."""
|
||||||
with connect(dsn) as conn:
|
with connect(dsn) as conn:
|
||||||
@@ -49,9 +55,7 @@ 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',
|
_require_loaded('hstore', conn)
|
||||||
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:
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ 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'.
|
||||||
|
|||||||
Reference in New Issue
Block a user