Files
worklenz/worklenz-backend/database/pg-migrations/README.md
chamiakJ a6286eb2b8 feat(migrations): add README for node-pg-migrate and enhance frontend configuration
- Created a README file for database migrations using node-pg-migrate, detailing commands, file format, best practices, and an example migration.
- Added a Vite configuration file for the frontend, including plugin setup, alias resolution, build optimizations, and responsive design adjustments for task list components.
- Updated i18n configuration to preload the 'home' namespace for improved localization.
- Enhanced task list styling with responsive design features for better mobile usability.
2025-07-23 07:46:39 +05:30

2.1 KiB

Node-pg-migrate Migrations

This directory contains database migrations managed by node-pg-migrate.

Migration Commands

  • npm run migrate:create -- migration-name - Create a new migration file
  • npm run migrate:up - Run all pending migrations
  • npm run migrate:down - Rollback the last migration
  • npm run migrate:redo - Rollback and re-run the last migration

Migration File Format

Migrations are JavaScript files with timestamp prefixes (e.g., 20250115000000_performance-indexes.js).

Each migration file exports two functions:

  • exports.up - Contains the forward migration logic
  • exports.down - Contains the rollback logic

Best Practices

  1. Always use IF EXISTS/IF NOT EXISTS checks to make migrations idempotent
  2. Test migrations locally before deploying to production
  3. Include rollback logic in the down function for all changes
  4. Use descriptive names for migration files
  5. Keep migrations focused - one logical change per migration

Example Migration

exports.up = pgm => {
  // Create table with IF NOT EXISTS
  pgm.createTable('users', {
    id: 'id',
    name: { type: 'varchar(100)', notNull: true },
    created_at: {
      type: 'timestamp',
      notNull: true,
      default: pgm.func('current_timestamp')
    }
  }, { ifNotExists: true });

  // Add index with IF NOT EXISTS
  pgm.createIndex('users', 'name', {
    name: 'idx_users_name',
    ifNotExists: true
  });
};

exports.down = pgm => {
  // Drop in reverse order
  pgm.dropIndex('users', 'name', { 
    name: 'idx_users_name', 
    ifExists: true 
  });
  
  pgm.dropTable('users', { ifExists: true });
};

Migration History

The pgmigrations table tracks which migrations have been run. Do not modify this table manually.

Converting from SQL Migrations

When converting SQL migrations to node-pg-migrate format:

  1. Wrap SQL statements in pgm.sql() calls
  2. Use node-pg-migrate helper methods where possible (createTable, addColumns, etc.)
  3. Always include IF EXISTS/IF NOT EXISTS checks
  4. Ensure proper rollback logic in the down function