X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/5d69c7ade1938818484bb81f36ec12c64e79bf9d..a21a0864f174e0877d11511b5ff2acff24438f12:/nominatim/tools/migration.py?ds=sidebyside diff --git a/nominatim/tools/migration.py b/nominatim/tools/migration.py index b5f0b80e..4af5cb48 100644 --- a/nominatim/tools/migration.py +++ b/nominatim/tools/migration.py @@ -3,11 +3,11 @@ Functions for database migration to newer software versions. """ import logging -from ..db import properties -from ..db.connection import connect -from ..version import NOMINATIM_VERSION -from . import refresh, database_import -from ..errors import UsageError +from nominatim.db import properties +from nominatim.db.connection import connect +from nominatim.version import NOMINATIM_VERSION +from nominatim.tools import refresh, database_import +from nominatim.errors import UsageError LOG = logging.getLogger() @@ -47,7 +47,7 @@ def migrate(config, paths): if has_run_migration: LOG.warning('Updating SQL functions.') - refresh.create_functions(conn, config, paths.sqllib_dir) + refresh.create_functions(conn, config) properties.set_property(conn, 'database_version', '{0[0]}.{0[1]}.{0[2]}-{0[3]}'.format(NOMINATIM_VERSION)) @@ -156,3 +156,20 @@ def change_housenumber_transliteration(conn, **_): cur.execute("""UPDATE placex SET housenumber = create_housenumber_id(housenumber) WHERE housenumber is not null""") + + +@_migration(3, 7, 0, 0) +def switch_placenode_geometry_index(conn, **_): + """ Replace idx_placex_geometry_reverse_placeNode index. + + Make the index slightly more permissive, so that it can also be used + when matching up boundaries and place nodes. It makes the index + idx_placex_adminname index unnecessary. + """ + with conn.cursor() as cur: + cur.execute(""" CREATE INDEX IF NOT EXISTS idx_placex_geometry_placenode ON placex + USING GIST (geometry) + WHERE osm_type = 'N' and rank_search < 26 + and class = 'place' and type != 'postcode' + and linked_place_id is null""") + cur.execute(""" DROP INDEX IF EXISTS idx_placex_adminname """)