Clicksuite: ClickHouse Migration Tool

1.7.4 · active · verified Wed Apr 22

Clicksuite is a robust CLI and programmatic tool designed for managing ClickHouse database migrations. It supports environment-specific configurations, allowing for separate SQL definitions across development, test, and production environments. Key features include multi-statement migration support, environment variable interpolation for secure credential management (e.g., `${ENV_VAR}`), automatic `schema.sql` generation for multi-database schema tracking, and a dry-run mode for previewing migrations. The tool also provides verbose logging control and comprehensive migration management commands (apply, rollback, reset, status). It is currently at version 1.7.4, with a steady release cadence addressing fixes and adding features like programmatic usage settings and multi-statement support. It ships with full TypeScript types, making it suitable for modern JavaScript and TypeScript projects.

Common errors

Warnings

Install

Imports

Quickstart

Demonstrates programmatic usage of Clicksuite to apply migrations, configuring connection details and paths using environment variables.

import { ClickHouseMigrator } from 'clicksuite';
import path from 'path';

// Load environment variables (e.g., using 'dotenv')
import 'dotenv/config';

async function runMigrations() {
  const config = {
    clickhouseUrl: process.env.CLICKHOUSE_URL ?? 'http://default@localhost:8123/my_database',
    migrationsDir: path.resolve(process.cwd(), 'migrations'),
    migrationsDatabase: process.env.CLICKSUITE_MIGRATIONS_DATABASE ?? 'default',
    environment: process.env.CLICKSUITE_ENVIRONMENT ?? 'development',
    verbose: true,
    skipSchemaUpdate: false,
  };

  const migrator = new ClickHouseMigrator(config);

  console.log('Applying migrations...');
  await migrator.up();
  console.log('Migrations applied successfully.');

  // Example of generating a new migration (typically done via CLI)
  // await migrator.generate('create_users_and_products_tables');

  // Example of rolling back the last migration
  // console.log('Rolling back last migration...');
  // await migrator.down();
  // console.log('Last migration rolled back.');
}

runMigrations().catch(error => {
  console.error('Migration failed:', error);
  process.exit(1);
});

view raw JSON →