{"library":"node-pg-migrate","title":"PostgreSQL Database Migration Management Tool","description":"node-pg-migrate is a robust and feature-rich PostgreSQL database migration management tool designed for Node.js environments. It empowers developers to manage schema changes through JavaScript or TypeScript migration files, offering precise control over `up` and `down` operations for evolving database schemas. The current stable version is 8.0.4, with active development proceeding on the v9.0.0 alpha series, indicating a future major release that will introduce significant enhancements and breaking changes. The project generally maintains a consistent release cadence for minor and patch versions, while major updates are developed over a longer period. Key advantages include its strong TypeScript support, a flexible and extensible migration file structure, and a comprehensive command-line interface, all contributing to streamlined and reliable database schema evolution. It integrates natively with the `pg` client library for database interactions.","language":"javascript","status":"active","last_verified":"Tue Apr 21","install":{"commands":["npm install node-pg-migrate"],"cli":{"name":"pg-migrate","version":null}},"imports":["import { migrate } from 'node-pg-migrate';","import { PgLiteral } from 'node-pg-migrate';","import type { MigrationBuilder, ColumnDefinitions } from 'node-pg-migrate';"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import { migrate } from 'node-pg-migrate';\nimport { Pool } from 'pg';\nimport path from 'path';\nimport 'dotenv/config'; // Make sure to install dotenv if you use it\n\n// --- IMPORTANT: Ensure DATABASE_URL is set in your .env file or environment variables ---\n// Example: DATABASE_URL=postgres://user:password@localhost:5432/testdb\n\nasync function runDatabaseMigrations() {\n  const databaseUrl = process.env.DATABASE_URL ?? 'postgres://user:password@localhost:5432/testdb';\n\n  if (!databaseUrl) {\n    console.error('DATABASE_URL environment variable is not set. Please provide it.');\n    process.exit(1);\n  }\n\n  const pool = new Pool({\n    connectionString: databaseUrl,\n  });\n\n  const migrationsDir = path.resolve(__dirname, 'migrations');\n\n  try {\n    console.log('Starting database migrations...');\n    await migrate({\n      db: pool, // Pass the pg.Pool instance\n      migrationsTable: 'pgmigrations', // Table to track applied migrations\n      dir: migrationsDir, // Directory containing your migration files\n      direction: 'up', // 'up' to apply, 'down' to revert\n      count: Infinity, // Apply all pending migrations\n      createShorthands: true, // Automatically create shorthand definitions\n      // verbose: true, // Uncomment for detailed logging\n      log: (message: string) => console.log(`[node-pg-migrate] ${message}`),\n      noLock: false, // Use advisory locks to prevent concurrent migrations\n      dryRun: false // Set to true to preview changes without applying\n    });\n    console.log('Database migrations completed successfully.');\n  } catch (error) {\n    console.error('Database migration failed:', error);\n    process.exit(1);\n  } finally {\n    await pool.end();\n  }\n}\n\nrunDatabaseMigrations();\n\n// To run this:\n// 1. npm install node-pg-migrate pg dotenv\n// 2. Create a 'migrations' directory.\n// 3. Create a migration file, e.g., 'migrations/001_initial_schema.ts':\n//    import type { MigrationBuilder, ColumnDefinitions } from 'node-pg-migrate';\n//    export async function up(pgm: MigrationBuilder): Promise<void> {\n//      pgm.createTable('users', { id: 'id', name: { type: 'varchar(100)', notNull: true } });\n//    }\n//    export async function down(pgm: MigrationBuilder): Promise<void> {\n//      pgm.dropTable('users');\n//    }\n// 4. Configure DATABASE_URL in a .env file.\n// 5. Run with `npx ts-node your-migration-script.ts` (assuming ts-node is installed)","lang":"typescript","description":"This quickstart demonstrates how to programmatically run `node-pg-migrate` to apply all pending database migrations using a `pg.Pool` instance and environment variables for connection.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":null}