#!/usr/bin/php -Cq getCol($sSQL); if (PEAR::isError($aPartitions)) { fail($aPartitions->getMessage()); } $aPartitions[] = 'none'; $sTemplate = file_get_contents(CONST_BasePath.'/sql/partitions.src.sql'); preg_match_all('#^-- start(.*?)^-- end#ms', $sTemplate, $aMatches, PREG_SET_ORDER); foreach($aMatches as $aMatch) { $sResult = ''; foreach($aPartitions as $sPartitionName) { $sResult .= str_replace('-partition-', $sPartitionName, $aMatch[1]); } $sTemplate = str_replace($aMatch[0], $sResult, $sTemplate); } pgsqlRunScript($sTemplate); } if ($aCMDResult['load-data'] || isset($aCMDResult['all'])) { $bDidSomething = true; pgsqlRunScriptFile(CONST_BasePath.'/sql/loaddata.sql'); } if (!$bDidSomething) { showUsage($aCMDOptions, true); } function pgsqlRunScriptFile($sFilename) { if (!file_exists($sFilename)) fail('unable to find '.$sFilename); // Convert database DSN to psql paramaters $aDSNInfo = DB::parseDSN(CONST_Database_DSN); $sCMD = 'psql -f '.$sFilename.' '.$aDSNInfo['database']; $aDescriptors = array( 0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('file', '/dev/null', 'a') ); $ahPipes = null; $hProcess = proc_open($sCMD, $aDescriptors, $ahPipes); if (!is_resource($hProcess)) fail('unable to start pgsql'); fclose($ahPipes[0]); // TODO: error checking while(!feof($ahPipes[1])) { echo fread($ahPipes[1], 4096); } fclose($ahPipes[1]); proc_close($hProcess); } function pgsqlRunScript($sScript) { // Convert database DSN to psql paramaters $aDSNInfo = DB::parseDSN(CONST_Database_DSN); $sCMD = 'psql '.$aDSNInfo['database']; $aDescriptors = array( 0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('file', '/dev/null', 'a') ); $ahPipes = null; $hProcess = proc_open($sCMD, $aDescriptors, $ahPipes); if (!is_resource($hProcess)) fail('unable to start pgsql'); fwrite($ahPipes[0], $sScript); fclose($ahPipes[0]); // TODO: error checking while(!feof($ahPipes[1])) { echo fread($ahPipes[1], 4096); } fclose($ahPipes[1]); proc_close($hProcess); }