X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/d485aef7019206bc02167d391c91cb1aa47fe6dc..105597be056bf9cbf3bb4c15f9bc516479e48ee2:/nominatim/tools/migration.py diff --git a/nominatim/tools/migration.py b/nominatim/tools/migration.py index 545f5c48..ffeb4958 100644 --- a/nominatim/tools/migration.py +++ b/nominatim/tools/migration.py @@ -46,21 +46,19 @@ def migrate(config: Configuration, paths: Any) -> int: db_version = _guess_version(conn) - has_run_migration = False for version, func in _MIGRATION_FUNCTIONS: - if db_version <= version: + if db_version < version or \ + (db_version == (3, 5, 0, 99) and version == (3, 5, 0, 99)): title = func.__doc__ or '' LOG.warning("Running: %s (%s)", title.split('\n', 1)[0], version) kwargs = dict(conn=conn, config=config, paths=paths) func(**kwargs) conn.commit() - has_run_migration = True - if has_run_migration: - LOG.warning('Updating SQL functions.') - refresh.create_functions(conn, config) - tokenizer = tokenizer_factory.get_tokenizer_for_db(config) - tokenizer.update_sql_functions(config) + LOG.warning('Updating SQL functions.') + refresh.create_functions(conn, config) + tokenizer = tokenizer_factory.get_tokenizer_for_db(config) + tokenizer.update_sql_functions(config) properties.set_property(conn, 'database_version', str(NOMINATIM_VERSION)) @@ -104,7 +102,7 @@ def _migration(major: int, minor: int, patch: int = 0, there. """ def decorator(func: Callable[..., None]) -> Callable[..., None]: - version = (NominatimVersion(major, minor, patch, dbpatch)) + version = NominatimVersion(major, minor, patch, dbpatch) _MIGRATION_FUNCTIONS.append((version, func)) return func @@ -371,3 +369,16 @@ def enable_forward_dependencies(conn: Connection, **_: Any) -> None: ON planet_osm_rels USING gin (parts) WITH (fastupdate=off)""") cur.execute("ANALYZE planet_osm_ways") + + +@_migration(4, 2, 99, 1) +def add_improved_geometry_reverse_placenode_index(conn: Connection, **_: Any) -> None: + """ Create improved index for reverse lookup of place nodes. + """ + with conn.cursor() as cur: + cur.execute("""CREATE INDEX IF NOT EXISTS idx_placex_geometry_reverse_lookupPlaceNode + ON placex + USING gist (ST_Buffer(geometry, reverse_place_diameter(rank_search))) + WHERE rank_address between 4 and 25 AND type != 'postcode' + AND name is not null AND linked_place_id is null AND osm_type = 'N' + """)