diff --git a/nominatim/clicmd/args.py b/nominatim/clicmd/args.py index 98673ed6..15de72a5 100644 --- a/nominatim/clicmd/args.py +++ b/nominatim/clicmd/args.py @@ -181,7 +181,6 @@ class NominatimArgs: osm2pgsql_style_path=self.config.config_dir, threads=self.threads or default_threads, dsn=self.config.get_libpq_dsn(), - forward_dependencies=self.config.get_bool('UPDATE_FORWARD_DEPENDENCIES'), flatnode_file=str(self.config.get_path('FLATNODE_FILE') or ''), tablespaces=dict(slim_data=self.config.TABLESPACE_OSM_DATA, slim_index=self.config.TABLESPACE_OSM_INDEX, diff --git a/nominatim/tools/exec_utils.py b/nominatim/tools/exec_utils.py index 9c801142..2e5c4801 100644 --- a/nominatim/tools/exec_utils.py +++ b/nominatim/tools/exec_utils.py @@ -136,9 +136,6 @@ def run_osm2pgsql(options: Mapping[str, Any]) -> None: if options['flatnode_file']: cmd.extend(('--flat-nodes', options['flatnode_file'])) - if not options.get('forward_dependencies', False): - cmd.extend(('--with-forward-dependencies', 'false')) - for key, param in (('slim_data', '--tablespace-slim-data'), ('slim_index', '--tablespace-slim-index'), ('main_data', '--tablespace-main-data'), diff --git a/nominatim/tools/migration.py b/nominatim/tools/migration.py index 147a9f9c..10bca15c 100644 --- a/nominatim/tools/migration.py +++ b/nominatim/tools/migration.py @@ -348,3 +348,29 @@ def split_pending_index(conn: Connection, **_: Any) -> None: WHERE class = 'boundary' and type = 'administrative' and indexed_status > 0""") cur.execute("DROP INDEX IF EXISTS idx_placex_pendingsector") + + +@_migration(4, 2, 99, 0) +def enable_forward_dependencies(conn: Connection, **_: Any) -> None: + """ Create indexes for updates with forward dependency tracking (long-running). + """ + if conn.table_exists('planet_osm_ways'): + with conn.cursor() as cur: + cur.execute("""SELECT * FROM pg_indexes + WHERE tablename = 'planet_osm_ways' + and indexdef LIKE '%nodes%'""") + if cur.rowcount == 0: + cur.execute("""CREATE OR REPLACE FUNCTION public.planet_osm_index_bucket(bigint[]) + RETURNS bigint[] + LANGUAGE sql IMMUTABLE + AS $function$ + SELECT ARRAY(SELECT DISTINCT unnest($1) >> 5) + $function$""") + cur.execute("""CREATE INDEX planet_osm_ways_nodes_bucket_idx + ON planet_osm_ways + USING gin (planet_osm_index_bucket(nodes)) + WITH (fastupdate=off)""") + cur.execute("""CREATE INDEX planet_osm_rels_parts_idx + ON planet_osm_rels USING gin (parts) + WITH (fastupdate=off)""") + cur.execute("ANALYZE planet_osm_ways") diff --git a/nominatim/version.py b/nominatim/version.py index 3ae9c43a..43a30d9e 100644 --- a/nominatim/version.py +++ b/nominatim/version.py @@ -25,7 +25,7 @@ from typing import Optional, Tuple # patch level when cherry-picking the commit with the migration. # # Released versions always have a database patch level of 0. -NOMINATIM_VERSION = (4, 2, 0, 0) +NOMINATIM_VERSION = (4, 2, 99, 0) POSTGRESQL_REQUIRED_VERSION = (9, 6) POSTGIS_REQUIRED_VERSION = (2, 2) diff --git a/settings/env.defaults b/settings/env.defaults index 8378d7b0..3115f438 100644 --- a/settings/env.defaults +++ b/settings/env.defaults @@ -33,15 +33,6 @@ NOMINATIM_MAX_WORD_FREQUENCY=50000 # If true, admin level changes on places with many contained children are blocked. NOMINATIM_LIMIT_REINDEXING=yes -# When set to 'yes' changes to OSM objects will be propagated to dependent -# objects. This means that geometries of way/relations are updated when a -# node on a way or a way in a relation changes. -# EXPERT ONLY: Use with care. Enabling this option might lead to significantly -# more load when updates are applied. -# Do not enable this option on an existing database. -# The default is to not propagate these changes. -NOMINATIM_UPDATE_FORWARD_DEPENDENCIES=no - # Restrict search languages. # Normally Nominatim will include all language variants of name:XX # in the search index. Set this to a comma separated list of language