X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/b11718699ede4fc152dae5f2dd14a27d739b4cf3..fb95c35977f5bb772533c7977969e6b915ea0a92:/utils/setup.php?ds=sidebyside diff --git a/utils/setup.php b/utils/setup.php index c842ba33..2542bd9e 100755 --- a/utils/setup.php +++ b/utils/setup.php @@ -43,6 +43,26 @@ $bDidSomething = false; + // Check if osm-file is set and points to a valid file if --all or --import-data is given + if ($aCMDResult['import-data'] || $aCMDResult['all']) + { + if (!isset($aCMDResult['osm-file'])) + { + fail('missing --osm-file for data import'); + } + + if (!file_exists($aCMDResult['osm-file'])) + { + fail('the path supplied to --osm-file does not exist'); + } + + if (!is_readable($aCMDResult['osm-file'])) + { + fail('osm-file "'.$aCMDResult['osm-file'].'" not readable'); + } + } + + // This is a pretty hard core default - the number of processors in the box - 1 $iInstances = isset($aCMDResult['threads'])?$aCMDResult['threads']:(getProcessorCount()-1); if ($iInstances < 1) @@ -89,9 +109,9 @@ passthru('createdb -E UTF-8 '.$aDSNInfo['database']); } - if ($aCMDResult['create-db'] || $aCMDResult['all']) + if ($aCMDResult['setup-db'] || $aCMDResult['all']) { - echo "Create DB (2)\n"; + echo "Setup DB\n"; $bDidSomething = true; // TODO: path detection, detection memory, etc. @@ -126,8 +146,9 @@ echo "Please download and build osm2pgsql.\nIf it is already installed, check the path in your local settings (settings/local.php) file.\n"; fail("osm2pgsql not found in '$osm2pgsql'"); } + $osm2pgsql .= ' --tablespace-slim-index ssd --tablespace-main-index ssd --tablespace-main-data ssd --tablespace-slim-data data'; $osm2pgsql .= ' -lsc -O gazetteer --hstore'; - $osm2pgsql .= ' -C '.$iCacheMemory; + $osm2pgsql .= ' -C 16000'; $osm2pgsql .= ' -d '.$aDSNInfo['database'].' '.$aCMDResult['osm-file']; passthruCheckReturn($osm2pgsql); @@ -251,7 +272,7 @@ if ($aCMDResult['load-data'] || $aCMDResult['all']) { - echo "Load Data\n"; + echo "Drop old Data\n"; $bDidSomething = true; $oDB =& getDB(); @@ -287,17 +308,18 @@ echo '.'; } + // used by getorcreate_word_id to ignore frequent partial words + if (!pg_query($oDB->connection, 'CREATE OR REPLACE FUNCTION get_maxwordfreq() RETURNS integer AS $$ SELECT '.CONST_Max_Word_Frequency.' as maxwordfreq; $$ LANGUAGE SQL IMMUTABLE')) fail(pg_last_error($oDB->connection)); + echo ".\n"; + // pre-create the word list if (!$aCMDResult['disable-token-precalc']) { - if (!pg_query($oDB->connection, 'select count(make_keywords(v)) from (select distinct svals(name) as v from place) as w where v is not null;')) fail(pg_last_error($oDB->connection)); - echo '.'; - if (!pg_query($oDB->connection, 'select count(make_keywords(v)) from (select distinct postcode as v from place) as w where v is not null;')) fail(pg_last_error($oDB->connection)); - echo '.'; - if (!pg_query($oDB->connection, 'select count(getorcreate_housenumber_id(v)) from (select distinct housenumber as v from place where housenumber is not null) as w;')) fail(pg_last_error($oDB->connection)); - echo '.'; + echo "Loading word list\n"; + pgsqlRunScriptFile(CONST_BasePath.'/data/words.sql'); } + echo "Load Data\n"; $aDBInstances = array(); for($i = 0; $i < $iInstances; $i++) { @@ -320,6 +342,7 @@ echo '.'; } echo "\n"; + pgsqlRunScript('ALTER TABLE place SET TABLESPACE "data"'); echo "Reanalysing database...\n"; pgsqlRunScript('ANALYSE'); } @@ -334,7 +357,7 @@ { $aDBInstances[$i] =& getDB(true); if (!pg_query($aDBInstances[$i]->connection, 'set enable_bitmapscan = off')) fail(pg_last_error($oDB->connection)); - $sSQL = 'select count(*) from (select insertLocationRoad(partition, place_id, country_code, geometry) from '; + $sSQL = 'select count(*) from (select insertLocationRoad(partition, place_id, calculated_country_code, geometry) from '; $sSQL .= 'placex where osm_id % '.$iInstances.' = '.$i.' and rank_search between 26 and 27 and class = \'highway\') as x '; if ($aCMDResult['verbose']) echo "$sSQL\n"; if (!pg_send_query($aDBInstances[$i]->connection, $sSQL)) fail(pg_last_error($oDB->connection)); @@ -357,6 +380,8 @@ { $bDidSomething = true; + pgsqlRunScriptFile(CONST_BasePath.'/sql/tiger_import_start.sql'); + $aDBInstances = array(); for($i = 0; $i < $iInstances; $i++) { @@ -405,6 +430,9 @@ } echo "\n"; } + + echo "Creating indexes\n"; + pgsqlRunScriptFile(CONST_BasePath.'/sql/tiger_import_finish.sql'); } if ($aCMDResult['calculate-postcodes'] || $aCMDResult['all']) @@ -412,14 +440,14 @@ $bDidSomething = true; $oDB =& getDB(); if (!pg_query($oDB->connection, 'DELETE from placex where osm_type=\'P\'')) fail(pg_last_error($oDB->connection)); - $sSQL = "insert into placex (osm_type,osm_id,class,type,postcode,country_code,geometry) "; - $sSQL .= "select 'P',nextval('seq_postcodes'),'place','postcode',postcode,country_code,"; - $sSQL .= "ST_SetSRID(ST_Point(x,y),4326) as geometry from (select country_code,postcode,"; + $sSQL = "insert into placex (osm_type,osm_id,class,type,postcode,calculated_country_code,geometry) "; + $sSQL .= "select 'P',nextval('seq_postcodes'),'place','postcode',postcode,calculated_country_code,"; + $sSQL .= "ST_SetSRID(ST_Point(x,y),4326) as geometry from (select calculated_country_code,postcode,"; $sSQL .= "avg(st_x(st_centroid(geometry))) as x,avg(st_y(st_centroid(geometry))) as y "; - $sSQL .= "from placex where postcode is not null group by country_code,postcode) as x"; + $sSQL .= "from placex where postcode is not null group by calculated_country_code,postcode) as x"; if (!pg_query($oDB->connection, $sSQL)) fail(pg_last_error($oDB->connection)); - $sSQL = "insert into placex (osm_type,osm_id,class,type,postcode,country_code,geometry) "; + $sSQL = "insert into placex (osm_type,osm_id,class,type,postcode,calcuclated_country_code,geometry) "; $sSQL .= "select 'P',nextval('seq_postcodes'),'place','postcode',postcode,'us',"; $sSQL .= "ST_SetSRID(ST_Point(x,y),4326) as geometry from us_postcode"; if (!pg_query($oDB->connection, $sSQL)) fail(pg_last_error($oDB->connection)); @@ -432,7 +460,12 @@ if (!file_exists(CONST_Osmosis_Binary)) fail("please download osmosis"); if (file_exists(CONST_BasePath.'/settings/configuration.txt')) echo "settings/configuration.txt already exists\n"; - else passthru(CONST_Osmosis_Binary.' --read-replication-interval-init '.CONST_BasePath.'/settings'); + else + { + passthru(CONST_Osmosis_Binary.' --read-replication-interval-init '.CONST_BasePath.'/settings'); + // server layout changed afer license change, fix path to minutely diffs + passthru("sed -i 's:minute-replicate:replication/minute:' ".CONST_BasePath.'/settings/configuration.txt'); + } $sDate = $aCMDResult['osmosis-init-date']; $aDate = date_parse_from_format("Y-m-d\TH-i", $sDate);