]> git.openstreetmap.org Git - nominatim.git/blobdiff - utils/setup.php
reorganise table creation
[nominatim.git] / utils / setup.php
index bc6a2aeb682f9e19bb8748e050f531d3d29ec761..f7ebafa6d6c3069d288634fc311b5bcd7706b5a6 100755 (executable)
                {
                        $osm2pgsql .= ' --flat-nodes '.CONST_Osm2pgsql_Flatnode_File;
                }
+               if (CONST_Tablespace_Osm2pgsql_Data)
+                       $osm2pgsql .= ' --tablespace-slim-data '.CONST_Tablespace_Osm2pgsql_Data;
+               if (CONST_Tablespace_Osm2pgsql_Index)
+                       $osm2pgsql .= ' --tablespace-slim-index '.CONST_Tablespace_Osm2pgsql_Index;
+               if (CONST_Tablespace_Place_Data)
+                       $osm2pgsql .= ' --tablespace-main-data '.CONST_Tablespace_Place_Data;
+               if (CONST_Tablespace_Place_Index)
+                       $osm2pgsql .= ' --tablespace-main-index '.CONST_Tablespace_Place_Index;
                $osm2pgsql .= ' -lsc -O gazetteer --hstore';
                $osm2pgsql .= ' -C '.$iCacheMemory;
                $osm2pgsql .= ' -P '.$aDSNInfo['port'];
                if ($aCMDResult['enable-debug-statements']) $sTemplate = str_replace('--DEBUG:', '', $sTemplate);
                if (CONST_Limit_Reindexing) $sTemplate = str_replace('--LIMIT INDEXING:', '', $sTemplate);
                pgsqlRunScript($sTemplate);
+
                if ($fPostgisVersion < 2.0) {
                        echo "Helper functions for postgis < 2.0\n";
                        $sTemplate = file_get_contents(CONST_BasePath.'/sql/postgis_15_aux.sql');
 
        if ($aCMDResult['create-tables'] || $aCMDResult['all'])
        {
-               echo "Tables\n";
                $bDidSomething = true;
-               pgsqlRunScriptFile(CONST_BasePath.'/sql/tables.sql');
+
+               echo "Tables\n";
+               $sTemplate = file_get_contents(CONST_BasePath.'/sql/tables.sql');
+               $sTemplate = str_replace('{www-user}', CONST_Database_Web_User, $sTemplate);
+               $sTemplate = replace_tablespace('{ts:address-data}',
+                                               CONST_Tablespace_Address_Data, $sTemplate);
+               $sTemplate = replace_tablespace('{ts:address-index}',
+                                               CONST_Tablespace_Address_Index, $sTemplate);
+               $sTemplate = replace_tablespace('{ts:search-data}',
+                                               CONST_Tablespace_Search_Data, $sTemplate);
+               $sTemplate = replace_tablespace('{ts:search-index}',
+                                               CONST_Tablespace_Search_Index, $sTemplate);
+               $sTemplate = replace_tablespace('{ts:aux-data}',
+                                               CONST_Tablespace_Aux_Data, $sTemplate);
+               $sTemplate = replace_tablespace('{ts:aux-index}',
+                                               CONST_Tablespace_Aux_Index, $sTemplate);
+               pgsqlRunScript($sTemplate, false);
 
                // re-run the functions
+               echo "Functions\n";
                $sTemplate = file_get_contents(CONST_BasePath.'/sql/functions.sql');
-               $sTemplate = str_replace('{modulepath}',CONST_BasePath.'/module', $sTemplate);
+               $sTemplate = str_replace('{modulepath}',
+                                            CONST_BasePath.'/module', $sTemplate);
                pgsqlRunScript($sTemplate);
        }
 
                if (!$aCMDResult['no-partitions']) $aPartitions[] = 0;
 
                $sTemplate = file_get_contents(CONST_BasePath.'/sql/partition-tables.src.sql');
+               $sTemplate = replace_tablespace('{ts:address-data}',
+                                               CONST_Tablespace_Address_Data, $sTemplate);
+               $sTemplate = replace_tablespace('{ts:address-index}',
+                                               CONST_Tablespace_Address_Index, $sTemplate);
+               $sTemplate = replace_tablespace('{ts:search-data}',
+                                               CONST_Tablespace_Search_Data, $sTemplate);
+               $sTemplate = replace_tablespace('{ts:search-index}',
+                                               CONST_Tablespace_Search_Index, $sTemplate);
+               $sTemplate = replace_tablespace('{ts:aux-data}',
+                                               CONST_Tablespace_Aux_Data, $sTemplate);
+               $sTemplate = replace_tablespace('{ts:aux-index}',
+                                               CONST_Tablespace_Aux_Index, $sTemplate);
                preg_match_all('#^-- start(.*?)^-- end#ms', $sTemplate, $aMatches, PREG_SET_ORDER);
                foreach($aMatches as $aMatch)
                {
                if (!$aCMDResult['no-partitions']) $aPartitions[] = 0;
 
                $sTemplate = file_get_contents(CONST_BasePath.'/sql/indices.src.sql');
+               $sTemplate = replace_tablespace('{ts:address-index}',
+                                               CONST_Tablespace_Address_Index, $sTemplate);
+               $sTemplate = replace_tablespace('{ts:search-index}',
+                                               CONST_Tablespace_Search_Index, $sTemplate);
+               $sTemplate = replace_tablespace('{ts:aux-index}',
+                                               CONST_Tablespace_Aux_Index, $sTemplate);
                preg_match_all('#^-- start(.*?)^-- end#ms', $sTemplate, $aMatches, PREG_SET_ORDER);
                foreach($aMatches as $aMatch)
                {
 
        }
 
-       function pgsqlRunScript($sScript)
+       function pgsqlRunScript($sScript, $bfatal = true)
        {
                global $aCMDResult;
                // Convert database DSN to psql parameters
                $aDSNInfo = DB::parseDSN(CONST_Database_DSN);
                if (!isset($aDSNInfo['port']) || !$aDSNInfo['port']) $aDSNInfo['port'] = 5432;
                $sCMD = 'psql -p '.$aDSNInfo['port'].' -d '.$aDSNInfo['database'];
-               if (!$aCMDResult['ignore-errors'])
+               if ($bfatal && !$aCMDResult['ignore-errors'])
                        $sCMD .= ' -v ON_ERROR_STOP=1';
                $aDescriptors = array(
                        0 => array('pipe', 'r'),
                }
                fclose($ahPipes[0]);
                $iReturn = proc_close($hProcess);
-               if ($iReturn > 0)
+               if ($bfatal && $iReturn > 0)
                {
                        fail("pgsql returned with error code ($iReturn)");
                }
                passthru($cmd, $result);
                if ($result != 0) fail('Error executing external command: '.$cmd);
        }
+
+       function replace_tablespace($sTemplate, $sTablespace, $sSql)
+       {
+               if ($sTablespace)
+                       $sSql = str_replace($sTemplate, 'TABLESPACE "'.$sTablespace.'"',
+                                           $sSql);
+               else
+                       $sSql = str_replace($sTemplate, '', $sSql);
+
+               return $sSql;
+       }
+