From: Sarah Hoffmann Date: Sun, 14 Apr 2019 09:29:28 +0000 (+0200) Subject: Merge branch 'observe-bounded-viewbox-in-postcode-search' of https://github.com/mtmai... X-Git-Tag: v3.3.0~12 X-Git-Url: https://git.openstreetmap.org/nominatim.git/commitdiff_plain/e5eb7ecdc1e0dd054a3aa166d32391c115d20405?hp=c9a63508943d92cfe2a1f5d2c12454662bb46770 Merge branch 'observe-bounded-viewbox-in-postcode-search' of https://github.com/mtmail/Nominatim into mtmail-observe-bounded-viewbox-in-postcode-search --- diff --git a/docs/admin/Faq.md b/docs/admin/Faq.md index 1e874c78..db5e101c 100644 --- a/docs/admin/Faq.md +++ b/docs/admin/Faq.md @@ -81,6 +81,14 @@ If you are using a flatnode file, then it may also be that the underlying filesystem does not fully support 'mmap'. A notable candidate is virtualbox's vboxfs. +### nominatim UPDATE failed: ERROR: buffer 179261 is not owned by resource owner Portal + +Several users [reported this](https://github.com/openstreetmap/Nominatim/issues/1168) during the initial import of the database. It's +something Postgresql internal Nominatim doesn't control. And Postgresql forums +suggest it's threading related but definitely some kind of crash of a process. +Users reported either rebooting the server, different hardware or just trying +the import again worked. + ### The website shows: "Could not get word tokens" The server cannot access your database. Add `&debug=1` to your URL @@ -104,11 +112,8 @@ However, you can solve this the quick and dirty way by commenting out that line ### "must be an array or an object that implements Countable" warning in /usr/share/pear/DB.php -As reported starting PHP 7.2. This external DB library is no longer maintained and will be replaced in future Nominatim versions. In the meantime you'd have to manually change the line near 774 from -`if (!count($dsn)) {` to `if (!$dsn && !count($dsn))`. [More details](https://github.com/openstreetmap/Nominatim/issues/1184) - - - +The warning started with PHP 7.2. Make sure you have at least [version 1.9.3 of PEAR DB](https://github.com/pear/DB/releases) +installed. ### Website reports "DB Error: insufficient permissions" diff --git a/lib/AddressDetails.php b/lib/AddressDetails.php index f5293586..2d40c84f 100644 --- a/lib/AddressDetails.php +++ b/lib/AddressDetails.php @@ -31,7 +31,7 @@ class AddressDetails private static function isAddress($aLine) { - return $aLine['isaddress'] == 't' || $aLine['type'] == 'country_code'; + return $aLine['isaddress'] || $aLine['type'] == 'country_code'; } public function getAddressDetails($bAll = false) @@ -49,7 +49,7 @@ class AddressDetails $sPrevResult = ''; foreach ($this->aAddressLines as $aLine) { - if ($aLine['isaddress'] == 't' && $sPrevResult != $aLine['localname']) { + if ($aLine['isaddress'] && $sPrevResult != $aLine['localname']) { $sPrevResult = $aLine['localname']; $aParts[] = $sPrevResult; } diff --git a/lib/DB.php b/lib/DB.php index 033e23f7..17dfe67d 100644 --- a/lib/DB.php +++ b/lib/DB.php @@ -229,12 +229,6 @@ class DB return 'ARRAY['.join(',', $a).']'; } - public function getLastError() - { - // https://secure.php.net/manual/en/pdo.errorinfo.php - return $this->connection->errorInfo(); - } - /** * Check if a table exists in the database. Returns true if it does. * diff --git a/lib/setup/SetupClass.php b/lib/setup/SetupClass.php index 9fcec2f0..c14190c3 100755 --- a/lib/setup/SetupClass.php +++ b/lib/setup/SetupClass.php @@ -144,9 +144,7 @@ class SetupFunctions } // Try accessing the C module, so we know early if something is wrong - if (!checkModulePresence()) { - fail('error loading nominatim.so module'); - } + checkModulePresence(); // raises exception on failure if (!file_exists(CONST_ExtraDataPath.'/country_osm_grid.sql.gz')) { echo 'Error: you need to download the country_osm_grid first:'; @@ -227,11 +225,9 @@ class SetupFunctions { info('Create Functions'); - // Try accessing the C module, so we know eif something is wrong - // update.php calls this function - if (!checkModulePresence()) { - fail('error loading nominatim.so module'); - } + // Try accessing the C module, so we know early if something is wrong + checkModulePresence(); // raises exception on failure + $this->createSqlFunctions(); } diff --git a/lib/setup_functions.php b/lib/setup_functions.php index 89736ae0..43f30a09 100755 --- a/lib/setup_functions.php +++ b/lib/setup_functions.php @@ -17,8 +17,9 @@ function checkInFile($sOSMFile) function checkModulePresence() { - // Try accessing the C module, so we know early if something is wrong - // and can simply error out. + // Try accessing the C module, so we know early if something is wrong. + // Raises Nominatim\DatabaseError on failure + $sModulePath = CONST_Database_Module_Path; $sSQL = "CREATE FUNCTION nominatim_test_import_func(text) RETURNS text AS '"; $sSQL .= $sModulePath . "/nominatim.so', 'transliteration' LANGUAGE c IMMUTABLE STRICT"; @@ -26,15 +27,5 @@ function checkModulePresence() $oDB = new \Nominatim\DB(); $oDB->connect(); - - $bResult = true; - try { - $oDB->exec($sSQL); - } catch (\Nominatim\DatabaseError $e) { - echo "\nERROR: Failed to load nominatim module. Reason:\n"; - echo $oDB->getLastError()[2] . "\n\n"; - $bResult = false; - } - - return $bResult; + $oDB->exec($sSQL, null, 'Database server failed to load '.$sModulePath.'/nominatim.so module'); } diff --git a/lib/template/details-html.php b/lib/template/details-html.php index 01583e5f..9ef59563 100644 --- a/lib/template/details-html.php +++ b/lib/template/details-html.php @@ -61,7 +61,7 @@ function _one_row($aAddressLine){ - $bNotUsed = (isset($aAddressLine['isaddress']) && $aAddressLine['isaddress'] == 'f'); + $bNotUsed = !$aAddressLine['isaddress']; echo ''."\n"; echo ' '.(trim($aAddressLine['localname'])?$aAddressLine['localname']:'No Name')."\n"; @@ -119,7 +119,7 @@ if ($aPointDetails['calculated_importance']) { kv('Importance' , $aPointDetails['calculated_importance'].($aPointDetails['importance']?'':' (estimated)') ); } - kv('Coverage' , ($aPointDetails['isarea']=='t'?'Polygon':'Point') ); + kv('Coverage' , ($aPointDetails['isarea']?'Polygon':'Point') ); kv('Centre Point' , $aPointDetails['lat'].','.$aPointDetails['lon'] ); kv('OSM' , osmLink($aPointDetails) ); if ($aPointDetails['wikipedia']) diff --git a/lib/template/details-json.php b/lib/template/details-json.php index 06554aba..4afb1b0b 100644 --- a/lib/template/details-json.php +++ b/lib/template/details-json.php @@ -33,7 +33,7 @@ if ($aPointDetails['icon']) { $aPlaceDetails['rank_address'] = (int) $aPointDetails['rank_address']; $aPlaceDetails['rank_search'] = (int) $aPointDetails['rank_search']; -$aPlaceDetails['isarea'] = ($aPointDetails['isarea'] == 't'); +$aPlaceDetails['isarea'] = $aPointDetails['isarea']; $aPlaceDetails['centroid'] = array( 'type' => 'Point', 'coordinates' => array( (float) $aPointDetails['lon'], (float) $aPointDetails['lat'] ) diff --git a/sql/functions.sql b/sql/functions.sql index 73790353..8ecb8c2c 100644 --- a/sql/functions.sql +++ b/sql/functions.sql @@ -2318,6 +2318,7 @@ DECLARE searchhousename HSTORE; searchrankaddress INTEGER; searchpostcode TEXT; + postcode_isaddress BOOL; searchclass TEXT; searchtype TEXT; countryname HSTORE; @@ -2325,6 +2326,8 @@ BEGIN -- The place ein question might not have a direct entry in place_addressline. -- Look for the parent of such places then and save if in for_place_id. + postcode_isaddress := true; + -- first query osmline (interpolation lines) IF in_housenumber >= 0 THEN SELECT parent_place_id, country_code, in_housenumber::text, 30, postcode, @@ -2441,7 +2444,10 @@ BEGIN searchcountrycode := location.country_code; END IF; IF location.type in ('postcode', 'postal_code') THEN - location.isaddress := FALSE; + postcode_isaddress := false; + IF location.osm_type != 'R' THEN + location.isaddress := FALSE; + END IF; END IF; countrylocation := ROW(location.place_id, location.osm_type, location.osm_id, location.name, location.class, location.type, @@ -2485,7 +2491,7 @@ BEGIN IF searchpostcode IS NOT NULL THEN location := ROW(null, null, null, hstore('ref', searchpostcode), 'place', - 'postcode', null, true, true, 5, 0)::addressline; + 'postcode', null, false, postcode_isaddress, 5, 0)::addressline; RETURN NEXT location; END IF; diff --git a/utils/setup.php b/utils/setup.php index 66b71920..8ad96a95 100644 --- a/utils/setup.php +++ b/utils/setup.php @@ -84,9 +84,7 @@ if ($aCMDResult['setup-db'] || $aCMDResult['all']) { } // Try accessing the C module, so we know early if something is wrong -if (!checkModulePresence()) { - fail('error loading nominatim.so module'); -} +checkModulePresence(); // raises exception on failure if ($aCMDResult['import-data'] || $aCMDResult['all']) { $bDidSomething = true; diff --git a/utils/update.php b/utils/update.php index a18c1721..c3620b06 100644 --- a/utils/update.php +++ b/utils/update.php @@ -352,7 +352,7 @@ if ($aResult['import-osmosis'] || $aResult['import-osmosis-all']) { $sBatchEnd = $aLastState['lastimportdate']; $iEndSequence = $aLastState['sequence_id']; - if ($aLastState['indexed'] == 't') { + if ($aLastState['indexed']) { // Sleep if the update interval has not yet been reached. $fNextUpdate = $aLastState['unix_ts'] + CONST_Replication_Update_Interval; if ($fNextUpdate > $fStartTime) { diff --git a/website/hierarchy.php b/website/hierarchy.php index b31b85d1..87e8a0af 100644 --- a/website/hierarchy.php +++ b/website/hierarchy.php @@ -121,7 +121,7 @@ if (!empty($aParentOfLines)) { echo '
'; echo ''.(trim($aAddressLine['localname'])?$aAddressLine['localname']:'No Name').''; echo ' ('; - echo ''.($aAddressLine['isarea']=='t'?'Polygon':'Point').''; + echo ''.($aAddressLine['isarea']?'Polygon':'Point').''; if ($sOSMType) echo ', '.$sOSMType.' '.osmLink($aAddressLine).''; echo ', GOTO'; echo ', '.$aAddressLine['area'];