X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/7db0da40ad02694b82fe9a387f277a58ca7c5fce..d60f89867b1a2622e1aa0e4809dfc74e7d69c032:/utils/check_import_finished.php diff --git a/utils/check_import_finished.php b/utils/check_import_finished.php index 7828f5cf..bd5d7a00 100755 --- a/utils/check_import_finished.php +++ b/utils/check_import_finished.php @@ -1,6 +1,8 @@ "\033[92m", @@ -20,15 +22,29 @@ $print_fail = function ($message = 'Failed') use ($term_colors) { $oDB = new Nominatim\DB; +function isReverseOnlyInstallation() +{ + global $oDB; + return !$oDB->tableExists('search_name'); +} + +// Check (guess) if the setup.php included --drop +function isNoUpdateInstallation() +{ + global $oDB; + return $oDB->tableExists('placex') && !$oDB->tableExists('planet_osm_rels') ; +} + + echo 'Checking database got created ... '; -if ($oDB->databaseExists()) { +if ($oDB->checkConnection()) { $print_success(); } else { $print_fail(); echo <<< END Hints: * Is the database server started? - * Check the CONST_Database_DSN variable in build/settings/local.php + * Check the NOMINATIM_DATABASE_DSN variable in your local .env * Try connecting to the database with the same settings END; @@ -54,27 +70,28 @@ END; exit(1); } -echo 'Checking place table ... '; -if ($oDB->tableExists('place')) { - $print_success(); -} else { - $print_fail(); - echo <<< END - * The import didn't finish. - Hints: - * Check the output of the utils/setup.php you ran. - Usually the osm2pgsql step failed. Check for errors related to - * the file you imported not containing any places - * harddrive full - * out of memory (RAM) - * osm2pgsql killed by other scripts, for consuming to much memory - -END; - exit(1); +if (!isNoUpdateInstallation()) { + echo 'Checking place table ... '; + if ($oDB->tableExists('place')) { + $print_success(); + } else { + $print_fail(); + echo <<< END + * The import didn't finish. + Hints: + * Check the output of the utils/setup.php you ran. + Usually the osm2pgsql step failed. Check for errors related to + * the file you imported not containing any places + * harddrive full + * out of memory (RAM) + * osm2pgsql killed by other scripts, for consuming to much memory + + END; + exit(1); + } } - echo 'Checking indexing status ... '; $iUnindexed = $oDB->getOne('SELECT count(*) FROM placex WHERE indexed_status > 0'); if ($iUnindexed == 0) { @@ -97,23 +114,29 @@ $aExpectedIndices = array( 'idx_place_addressline_address_place_id', 'idx_placex_rank_search', 'idx_placex_rank_address', - 'idx_placex_pendingsector', 'idx_placex_parent_place_id', - 'idx_placex_geometry_reverse_lookuppoint', 'idx_placex_geometry_reverse_lookuppolygon', 'idx_placex_geometry_reverse_placenode', - 'idx_location_area_country_place_id', 'idx_osmline_parent_place_id', 'idx_osmline_parent_osm_id', - 'idx_place_osm_unique', 'idx_postcode_id', - 'idx_postcode_postcode', - - // sql/indices_search.src.sql - 'idx_search_name_nameaddress_vector', - 'idx_search_name_name_vector', - 'idx_search_name_centroid' + 'idx_postcode_postcode' ); +if (!isReverseOnlyInstallation()) { + $aExpectedIndices = array_merge($aExpectedIndices, array( + // sql/indices_search.src.sql + 'idx_search_name_nameaddress_vector', + 'idx_search_name_name_vector', + 'idx_search_name_centroid' + )); +} +if (!isNoUpdateInstallation()) { + $aExpectedIndices = array_merge($aExpectedIndices, array( + 'idx_placex_pendingsector', + 'idx_location_area_country_place_id', + 'idx_place_osm_unique', + )); +} foreach ($aExpectedIndices as $sExpectedIndex) { echo "Checking index $sExpectedIndex ... "; @@ -123,14 +146,41 @@ foreach ($aExpectedIndices as $sExpectedIndex) { $print_fail(); echo <<< END Hints: - * Rerun the setup.php --create-search-indices step + * Run './utils/setup.php --create-search-indices --ignore-errors' to + create missing indices. END; exit(1); } } -if (CONST_Use_US_Tiger_Data) { +echo 'Checking search indices are valid ... '; +$sSQL = <<< END + SELECT relname + FROM pg_class, pg_index + WHERE pg_index.indisvalid = false + AND pg_index.indexrelid = pg_class.oid; +END; +$aInvalid = $oDB->getCol($sSQL); +if (empty($aInvalid)) { + $print_success(); +} else { + $print_fail(); + echo <<< END + At least one index is invalid. That can happen, e.g. when index creation was + disrupted and later restarted. You should delete the affected indices and + run the index stage of setup again. + See the question 'Can a stopped/killed import process be resumed?' in the + troubleshooting guide. + Affected indices: +END; + echo join(', ', $aInvalid) . "\n"; + exit(1); +} + + + +if (getSettingBool('USE_US_TIGER_DATA')) { echo 'Checking TIGER table exists ... '; if ($oDB->tableExists('location_property_tiger')) { $print_success();