mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-16 15:47:58 +00:00
port index creation to python
Also switches to jinja-based preprocessing, which allows to simplify the SQL files. Use 'if not exists' where possible so that the step can be rerun to fix missing indexes.
This commit is contained in:
@@ -25,6 +25,36 @@ def _get_tables(conn):
|
||||
|
||||
return set((row[0] for row in list(cur)))
|
||||
|
||||
|
||||
def _setup_tablespace_sql(config):
|
||||
""" Returns a dict with tablespace expressions for the different tablespace
|
||||
kinds depending on whether a tablespace is configured or not.
|
||||
"""
|
||||
out = {}
|
||||
for subset in ('ADDRESS', 'SEARCH', 'AUX'):
|
||||
for kind in ('DATA', 'INDEX'):
|
||||
tspace = getattr(config, 'TABLESPACE_{}_{}'.format(subset, kind))
|
||||
if tspace:
|
||||
tspace = 'TABLESPACE "{}"'.format(tspace)
|
||||
out['{}_{}'.format(subset.lower, kind.lower())] = tspace
|
||||
|
||||
return out
|
||||
|
||||
|
||||
def _setup_postgres_sql(conn):
|
||||
""" Set up a dictionary with various Postgresql/Postgis SQL terms which
|
||||
are dependent on the database version in use.
|
||||
"""
|
||||
out = {}
|
||||
pg_version = conn.server_version_tuple()
|
||||
# CREATE INDEX IF NOT EXISTS was introduced in PG9.5.
|
||||
# Note that you need to ignore failures on older versions when
|
||||
# unsing this construct.
|
||||
out['if_index_not_exists'] = ' IF NOT EXISTS ' if pg_version >= (9, 5, 0) else ''
|
||||
|
||||
return out
|
||||
|
||||
|
||||
class SQLPreprocessor: # pylint: disable=too-few-public-methods
|
||||
""" A environment for preprocessing SQL files from the
|
||||
lib-sql directory.
|
||||
@@ -44,17 +74,11 @@ class SQLPreprocessor: # pylint: disable=too-few-public-methods
|
||||
db_info['partitions'] = _get_partitions(conn)
|
||||
db_info['tables'] = _get_tables(conn)
|
||||
db_info['reverse_only'] = 'search_name' not in db_info['tables']
|
||||
|
||||
db_info['tablespace'] = {}
|
||||
for subset in ('ADDRESS', 'SEARCH', 'AUX'):
|
||||
for kind in ('DATA', 'INDEX'):
|
||||
tspace = getattr(config, 'TABLESPACE_{}_{}'.format(subset, kind))
|
||||
if tspace:
|
||||
tspace = 'TABLESPACE "{}"'.format(tspace)
|
||||
db_info['tablespace']['{}_{}'.format(subset.lower, kind.lower())] = tspace
|
||||
db_info['tablespace'] = _setup_tablespace_sql(config)
|
||||
|
||||
self.env.globals['config'] = config
|
||||
self.env.globals['db'] = db_info
|
||||
self.env.globals['sql'] = _setup_postgres_sql(conn)
|
||||
self.env.globals['modulepath'] = config.DATABASE_MODULE_PATH or \
|
||||
str((config.project_dir / 'module').resolve())
|
||||
|
||||
|
||||
Reference in New Issue
Block a user