- Migration Tool: Flyway (Community Edition)
- ORM: Exposed 1.0.0-rc-4
- Database: PostgreSQL 16
- Migration Generator:
exposed-migration-jdbc
# Check migration status
./gradlew flywayInfo
# Apply pending migrations
./gradlew flywayMigrate
# Validate migrations
./gradlew flywayValidate
# Undo a migration (manual)
./flyway-undo.sh <version>
# Generate migration from Exposed models
./gradlew generateMigration -Pargs="V2__Description"DB_URL(default:jdbc:postgresql://localhost:5432/documenten)DB_USER(default:documenten)DB_PASSWORD(default:documenten)
-
Update Exposed Table Definition
// src/main/kotlin/entities/EIORecord.kt object EIORecords : UUIDTable("eio_records") { val title = varchar("title", 255).nullable() }
-
Generate Migration Script
./gradlew generateMigration -Pargs="V2__Add_title_column" -
Review Generated SQL
cat src/main/resources/db/migration/V2__Add_title_column.sql
Important: Always review and test. The generator is pretty new and may not detect all changes to the schema.
-
Create Undo Script (manual)
-- src/main/resources/db/migration/U2__Drop_title_column.sql ALTER TABLE eio_records DROP COLUMN title;
-
Test Migration
./gradlew flywayMigrate ./gradlew flywayInfo
-
Test Undo
./flyway-undo.sh 2 ./gradlew flywayInfo
- Upgrade:
V<version>__<Description>.sql(e.g.,V2__Add_user_table.sql) - Undo:
U<version>__<Description>.sql(e.g.,U2__Drop_user_table.sql)
Re-run the migration:
./gradlew flywayMigrate# Stop containers
docker-compose down
# Remove volume
docker volume rm dmf-poc_postgres_data
# Start fresh
docker-compose up -d postgres
# Apply migrations
./gradlew flywayMigrateThe FlywayMigration.kt class can be used directly:
./gradlew run --args='migrate'
./gradlew run --args='info'
./gradlew run --args='validate'For complex migrations that need data transformation:
- Create standard
V*.sqlfile with schema changes - Add Kotlin code in transaction if needed
- Keep data transformations in separate scripts
- Migration generator:
src/main/kotlin/tooling/MigrationGenerator.kt - Flyway runner:
src/main/kotlin/tooling/FlywayMigration.kt - Undo helper:
flyway-undo.sh - Entity definitions:
src/main/kotlin/entities/ - Migration scripts:
src/main/resources/db/migration/