From df648651c6eaf4216d6cf06b6b57046d7b6ba5ba Mon Sep 17 00:00:00 2001 From: albertlast Date: Sun, 6 Sep 2026 11:46:09 +0200 Subject: [PATCH] Returns a bool from the substep that backs up a table doBackupTable() is declared to return bool and hands back whatever Db::$db->backup_table() gave it, which the database interface declares as object|bool. PostgreSQL answers a CREATE TABLE with a result object, so the declaration is violated and the upgrade stops at the first table it tries to back up. MySQL answers true, which is why only one engine shows it. Signed-off-by: albertlast --- Sources/Maintenance/Tools/Upgrade.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Sources/Maintenance/Tools/Upgrade.php b/Sources/Maintenance/Tools/Upgrade.php index 2b3a633535..baa53e3982 100644 --- a/Sources/Maintenance/Tools/Upgrade.php +++ b/Sources/Maintenance/Tools/Upgrade.php @@ -1380,7 +1380,10 @@ public function backupRecommended(): bool */ public function doBackupTable($table): bool { - return Db::$db->backup_table($table, 'backup_' . $table); + // The database layer answers with whatever its query returned, which is + // a result object on PostgreSQL and true on MySQL. Only an outright + // false means the table was not copied. + return Db::$db->backup_table($table, 'backup_' . $table) !== false; } /******************