🔀
Data & Persistence

Database Migrations

Flyway & Liquibase
💡 Database migrations ek GIT HISTORY hai, DATABASE SCHEMA ke liye — HAR CHANGE (naya column, naya table) EK VERSIONED, TRACKED, REPRODUCIBLE STEP hai. spring.jpa.hibernate.ddl-auto=update TARAH, "MANUALLY FILES EDIT karke, HISTORY BINA CHANGES karna" hai — RISKY, aur TEAM ke SAATH COORDINATE karna MUSHKIL.

PRODUCTION applications mein, ddl-auto=update RISKY hai — Hibernate KHUD DECIDE karta hai SCHEMA KAISे CHANGE karna hai, jo UNPREDICTABLE ho sakta hai. Migration TOOLS (Flyway, Liquibase) BEHTAR APPROACH hain — HAR SCHEMA CHANGE, EK EXPLICIT, VERSIONED FILE mein LIKHA jaata hai, jo TEAM ke SAATH SHARE, REVIEW, aur ROLLBACK kiya ja sakta hai.

Flyway (SIMPLER, SQL-based) SPRING BOOT mein AUTO-CONFIGURED hai — flyway-core DEPENDENCY ADD karo, db/migration FOLDER mein SQL FILES RAKHO (V1__init.sql pattern), aur APPLICATION STARTUP par, PENDING migrations AUTOMATICALLY APPLY ho jaati hain.

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
</dependency>

// src/main/resources/db/migration/V1__create_users_table.sql:
// CREATE TABLE users (
//     id BIGSERIAL PRIMARY KEY,
//     name VARCHAR(255) NOT NULL,
//     email VARCHAR(255) UNIQUE NOT NULL
// );

// src/main/resources/db/migration/V2__add_phone_column.sql:
// ALTER TABLE users ADD COLUMN phone VARCHAR(20);

// application.properties:
spring.jpa.hibernate.ddl-auto=validate   // Flyway SCHEMA MANAGE karta hai, Hibernate sirf VALIDATE
🔀
Database migrations ek GIT HISTORY hai, DATABASE SCHEMA ke liye — HAR CHANGE (naya column, naya table) EK VERSIONED, TRACKED, REPRODUCIBLE STEP hai. spring.jpa.hibernate.ddl-auto=update TARAH, "MANUALLY FILES EDIT karke, HISTORY BINA CHANGES karna" hai — RISKY, aur TEAM ke SAATH COORDINATE karna MUSHKIL.
1 / 2
⚡ Quick Recap
  • Migration tools = versioned, TRACKED, TEAM-shareable schema changes
  • Flyway = SQL files, naming convention se ORDER (V1__, V2__)
  • Application STARTUP par, PENDING migrations AUTOMATICALLY apply hoti hain
On this page (2 subtopics)

Flyway SIMPLER hai — SQL FILES (V1__init.sql, V2__add_column.sql) LIKHTE ho, NAMING CONVENTION se ORDER decide hota hai. Liquibase MORE FLEXIBLE hai — XML/YAML/JSON format SUPPORT karta hai, aur DATABASE-AGNOSTIC CHANGESETS likhна POSSIBLE hai (SAME changeset, MULTIPLE database TYPES par APPLY ho sakta hai).

  • Flyway = SIMPLE, SQL-based, naming convention se ordering
  • Liquibase = FLEXIBLE, XML/YAML/JSON, database-agnostic changesets
  • DONO Spring Boot mein AUTO-CONFIGURED (starter add karne se)

Flyway files EK STRICT naming pattern FOLLOW karte hain — V{version}__{description}.sql (jaise V1__create_users_table.sql). VERSION NUMBER se, EXECUTION ORDER decide hota hai, aur Flyway TRACK karta hai KAUN SI migrations ALREADY APPLY ho chuki hain (flyway_schema_history table mein).

db/migration/V1__create_users_table.sql
db/migration/V2__add_email_column.sql
db/migration/V3__create_orders_table.sql
// Application STARTUP par, Flyway AUTOMATICALLY PENDING migrations APPLY kar deta hai