Migration

Database migrations and a common database pool

Technology

The migration module provides comprehensive database migration capabilities for Project Forge applications. It enables structured database schema evolution with version control and automated migration execution.

Overview

This module provides:

Key Features

Migration Management

Integration Options

Database Support

Package Structure

Migration Library

Migration Files

Usage

Basic Setup

  1. Add Migration Dependency: Include migration in your project modules
  2. Create Migration Files: Add SQL files to ./queries/migrations/
  3. Register Migrations: Call AddMigration() to register migration files
  4. Execute Migrations: Use CLI command or automatic startup

Creating Migrations

Create SQL files in ./queries/migrations/ directory:

 1
2
3
4
5
6
7
8
9
10
-- 001_create_users_table.sql
CREATE TABLE IF NOT EXISTS users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
username VARCHAR(255) UNIQUE NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX idx_users_username ON users(username);
CREATE INDEX idx_users_email ON users(email);

Registration

Register migrations in your application:

1
2
3
4
5
// In your application initialization
func init() {
migrations.AddMigration("001_create_users_table.sql", createUsersTable)
migrations.AddMigration("002_add_user_roles.sql", addUserRoles)
}

Execution Methods

Command Line Execution

1
2
# Execute all pending migrations
./bin/app migrate

Automatic Startup Execution

1
2
3
4
5
6
7
8
9
// Add to your InitApp function
func InitApp(ctx context.Context, st *app.State) error {
// Run migrations on startup
err := migrate.Migrate(ctx, st.DB, st.Logger)
if err != nil {
return errors.Wrap(err, "migration failed")
}
return nil
}

Web Interface

Dependencies

Best Practices

Migration File Structure

Version Control

Production Deployment

Source Code

See Also