رول‌بک (Rollback) به بازگرداندن عملیات یا وضعیت به مرحله قبلی گفته می‌شود، اما معنا در ترنزکشن دیتابیس، مایگریشن و دپلوی یکسان نیست. یک Rollback تراکنش تغییرات ثبت‌نشده را لغو می‌کند. Rollback مایگریشن دستورهای Down تعریف‌شده را اجرا می‌کند و Rollback دپلوی نسخه برنامه را به Release قبلی برمی‌گرداند.

رول‌بک تراکنش در SQL

START TRANSACTION;
UPDATE products SET price = price * 1.10 WHERE id = 42;
-- On validation failure:
ROLLBACK;

رول‌بک مایگریشن در فریم‌ورک‌های مختلف

فریم‌ورکدستور نمونهنکته
Laravelphp artisan migrate:rollback --step=1یک Batch یا تعداد Step انتخابی
Yii 2php yii migrate/down 1در نسخه ۲ سینتکس migrate/down
Yii 3./yii migrate:down --limit=1در قالب دارای yiisoft/db-migration
Djangopython manage.py migrate shop 0002بازگشت اپ shop به Migration شماره 0002
Symfony / Doctrinephp bin/console doctrine:migrations:execute --down VERSIONنام دقیق VERSION و پشتیبانی Down باید بررسی شود
ASP.NET Core / EF Coredotnet ef database update PreviousMigrationدیتابیس به نسخه Migration قبلی بازمی‌گردد
// Laravel migration
public function up(): void {
    Schema::table('orders', fn (Blueprint $table) =>
        $table->string('tracking_code')->nullable());
}
public function down(): void {
    Schema::table('orders', fn (Blueprint $table) =>
        $table->dropColumn('tracking_code'));
}
from django.db import migrations, models

class Migration(migrations.Migration):
    dependencies = [("shop", "0002_previous")]
    operations = [
        migrations.AddField(
            model_name="order", name="tracking_code",
            field=models.CharField(max_length=40, null=True),
        )
    ]

رول‌بک دپلوی

kubectl rollout undo deployment/shop-api
# Or switch your release symlink / deployment target to a previous artifact.

هشدار مهم

همه مایگریشن‌ها برگشت‌پذیر نیستند. اگر ستون را همراه با داده حذف کرده باشید، Down نمی‌تواند خودکار داده را بازسازی کند. برای Production از تغییرات Expand / Contract، Backup و آزمایش بازگشت استفاده کنید.

مطالعه مایگریشن، ترنزکشن و مقاله استراتژی‌های دپلوی در باورژن مفید است.