fix update of postgres database

This commit is contained in:
Uwe Steinmann 2025-04-13 14:28:02 +02:00
parent cd4743d917
commit 92bee67638

View File

@ -406,86 +406,97 @@ echo '<p><a href="install.php">' . getMLText("settings_start_install") . '</a></
$this->contentHeading("SeedDMS Installation for version ".$_GET['version']); $this->contentHeading("SeedDMS Installation for version ".$_GET['version']);
$this->contentContainerStart(); $this->contentContainerStart();
$sqlfile = "update.sql"; $sqlfile = "update.sql";
switch($settings->_dbDriver) { switch($settings->_dbDriver) {
case 'mysql': case 'mysql':
case 'mysqli': case 'mysqli':
case 'mysqlnd': case 'mysqlnd':
$tmp = explode(":", $settings->_dbHostname); $tmp = explode(":", $settings->_dbHostname);
$dsn = $settings->_dbDriver.":dbname=".$settings->_dbDatabase.";host=".$tmp[0]; $dsn = $settings->_dbDriver.":dbname=".$settings->_dbDatabase.";host=".$tmp[0];
if(isset($tmp[1])) if(isset($tmp[1]))
$dsn .= ";port=".$tmp[1]; $dsn .= ";port=".$tmp[1];
break; break;
case 'sqlite': case 'sqlite':
$dsn = $settings->_dbDriver.":".$settings->_dbDatabase; $dsn = $settings->_dbDriver.":".$settings->_dbDatabase;
if(file_exists('update-'.$_GET['version'].'/update-sqlite3.sql')) if(file_exists('update-'.$_GET['version'].'/update-sqlite3.sql'))
$sqlfile = "update-sqlite3.sql"; $sqlfile = "update-sqlite3.sql";
break; break;
case 'pgsql': case 'pgsql':
$tmp = explode(":", $settings->_dbHostname); $tmp = explode(":", $settings->_dbHostname);
$dsn = $settings->_dbDriver.":dbname=".$settings->_dbDatabase.";host=".$tmp[0]; $dsn = $settings->_dbDriver.":dbname=".$settings->_dbDatabase.";host=".$tmp[0];
if(isset($tmp[1])) if(isset($tmp[1]))
$dsn .= ";port=".$tmp[1]; $dsn .= ";port=".$tmp[1];
if(file_exists('update-'.$_GET['version'].'/update-postgres.sql')) if(file_exists('update-'.$_GET['version'].'/update-postgres.sql'))
$sqlfile = "update-postgres.sql"; $sqlfile = "update-postgres.sql";
} }
$db = new PDO($dsn, $settings->_dbUser, $settings->_dbPass); $db = new PDO($dsn, $settings->_dbUser, $settings->_dbPass);
if (!$db) { if (!$db) {
die; die;
} }
$errorMsg = ''; $errorMsg = '';
$res = $db->query('select * from tblVersion'); switch($settings->_dbDriver) {
$recs = $res->fetchAll(PDO::FETCH_ASSOC); case 'mysql':
if(!empty($recs)) { case 'mysqli':
$rec = $recs[0]; case 'mysqlnd':
if($_GET['version'] > $rec['major'].'.'.$rec['minor'].'.'.$rec['subminor']) { case 'sqlite':
$sql = 'select * from `tblVersion`';
break;
case 'pgsql':
$sql = 'select * from "tblVersion"';
break;
}
$res = $db->query($sql);
$recs = $res->fetchAll(PDO::FETCH_ASSOC);
if(!empty($recs)) {
$rec = $recs[0];
if($_GET['version'] > $rec['major'].'.'.$rec['minor'].'.'.$rec['subminor']) {
if(file_exists('update-'.$_GET['version'].'/'.$sqlfile)) { if(file_exists('update-'.$_GET['version'].'/'.$sqlfile)) {
$queries = file_get_contents('update-'.$_GET['version'].'/'.$sqlfile); $queries = file_get_contents('update-'.$_GET['version'].'/'.$sqlfile);
$queries = explode(";", $queries); $queries = explode(";", $queries);
// execute queries // execute queries
if($queries) { if($queries) {
echo "<h3>Updating database schema</h3>"; echo "<h3>Updating database schema</h3>";
foreach($queries as $query) { foreach($queries as $query) {
$query = trim($query); $query = trim($query);
if (!empty($query)) { if (!empty($query)) {
echo $query."<br />"; echo $query."<br />";
if(false === $db->exec($query)) { if(false === $db->exec($query)) {
$e = $db->ErrorInfo(); $e = $db->ErrorInfo();
$errorMsg .= $e[2] . "<br/>"; $errorMsg .= $e[2] . "<br/>";
}
}
} }
} }
} else {
echo "<p>SQL file for update missing!</p>";
} }
} else {
echo "<p>Database schema already up to date.</p>";
} }
if(!$errorMsg) {
if(file_exists('update-'.$_GET['version'].'/update.php')) {
echo "<h3>Running update script</h3>";
include('update-'.$_GET['version'].'/update.php');
}
} else {
echo "<h3>Error Messages</h3>";
echo $errorMsg;
}
echo "<p><a href=\"install.php\">Go back to installation and recheck.</a></p>";
} else { } else {
echo "<p>SQL file for update missing!</p>"; echo "<p>Could not determine database schema version.</p>";
} }
} else { $db = null;
echo "<p>Database schema already up to date.</p>";
}
// just remove info for web page installation
if(!$errorMsg) { $settings->_printDisclaimer = false;
if(file_exists('update-'.$_GET['version'].'/update.php')) { $settings->_footNote = false;
echo "<h3>Running update script</h3>"; // end of the page
include('update-'.$_GET['version'].'/update.php');
}
} else {
echo "<h3>Error Messages</h3>";
echo $errorMsg;
}
echo "<p><a href=\"install.php\">Go back to installation and recheck.</a></p>";
} else {
echo "<p>Could not determine database schema version.</p>";
}
$db = null;
// just remove info for web page installation
$settings->_printDisclaimer = false;
$settings->_footNote = false;
// end of the page
$this->contentContainerEnd(); $this->contentContainerEnd();
$this->contentEnd(); $this->contentEnd();
$this->htmlEndPage(); $this->htmlEndPage();