From 23c0d645756ec8db6cf73a45fefaeee4aef934ba Mon Sep 17 00:00:00 2001 From: Naterfute Date: Wed, 26 Nov 2025 12:59:29 -0800 Subject: [PATCH] fixes #416 A bug was introduced where creating the contraint for postgres databases was done using "ADD CONTRAINT IF NOT EXISTS" which is not proper syntax --- ...09_19_000000_add_rustic_backup_support.php | 77 +++++++++++++++---- 1 file changed, 64 insertions(+), 13 deletions(-) diff --git a/database/migrations/2025_09_19_000000_add_rustic_backup_support.php b/database/migrations/2025_09_19_000000_add_rustic_backup_support.php index e6a8da56b..be1b0b7c4 100644 --- a/database/migrations/2025_09_19_000000_add_rustic_backup_support.php +++ b/database/migrations/2025_09_19_000000_add_rustic_backup_support.php @@ -1,5 +1,6 @@ enum('disk', ['wings', 's3', 'rustic_local', 'rustic_s3'])->default('wings')->change(); + switch (DB::connection()->getPdo()->getAttribute(PDO::ATTR_DRIVER_NAME)) { + case 'mysql': + Schema::table('backups', function (Blueprint $table) { + // Modify the disk column to support rustic adapters + $table->enum('disk', ['wings', 's3', 'rustic_local', 'rustic_s3']) + ->default('wings') + ->change(); - // Add rustic-specific columns - $table->string('snapshot_id', 64)->nullable()->after('checksum')->comment('Rustic snapshot ID for rustic backups'); - }); + // Add rustic-specific columns + $table->string('snapshot_id', 64) + ->nullable() + ->after('checksum') + ->comment('Rustic snapshot ID for rustic backups'); + }); + break; + case 'pgsql': + Schema::table('backups', function (Blueprint $table) { + // Use string + enforce values via CHECK constraint + $table->string('disk')->default('wings')->change(); + + // Add the check constraint + DB::statement(" + ALTER TABLE backups + ADD CONSTRAINT backups_disk_check + CHECK (disk IN ('wings', 's3', 'rustic_local', 'rustic_s3')) + "); + + // Add rustic-specific column + $table->string('snapshot_id', 64) + ->nullable() + ->after('checksum') + ->comment('Rustic snapshot ID for rustic backups'); + }); + break; + } } /** @@ -26,13 +55,35 @@ return new class extends Migration */ public function down(): void { - Schema::table('backups', function (Blueprint $table) { - // Revert disk column to original enum values - $table->enum('disk', ['wings', 's3'])->default('wings')->change(); + switch (DB::connection()->getPdo()->getAttribute(PDO::ATTR_DRIVER_NAME)) { + case 'mysql': + Schema::table('backups', function (Blueprint $table) { + // Revert disk column to original enum values + $table->enum('disk', ['wings', 's3'])->default('wings')->change(); + // Drop rustic-specific columns + $table->dropColumn('snapshot_id'); + }); + break; - // Drop rustic-specific columns - $table->dropColumn('snapshot_id'); - }); + case 'pgsql': + Schema::table('backups', function (Blueprint $table) { + // Drop the check constraint first + DB::statement("ALTER TABLE backups DROP CONSTRAINT backups_disk_check"); + // Revert disk to string with original allowed values + $table->string('disk')->default('wings')->change(); + + // Re-add original constraint + DB::statement(" + ALTER TABLE backups + ADD CONSTRAINT IF NOT EXISTS backups_disk_check + CHECK (disk IN ('wings', 's3')) + "); + + // Drop rustic-specific column + $table->dropColumn('snapshot_id'); + }); + break; + } } -}; \ No newline at end of file +};