db-migrator-distributed v0.0.5
db-migrator-distributed
About
A tool for executing DB migrations based on Umzug ( and Sequelize). Coming support for Firestore migrations...
The tool is safely executing migrations among distributed, synchronously launched server instances, by acquiring a greedy lock on a migration table.
Production tested
The tool has been tested and currently used in production env of one project.
It has been successfully tested with up to 6 simultaneously deployed instances.
Currently only tested with Postgres sequelize connection.
Getting started
- Install the package:
npm i db-migrator-distributed- In the file where you want to execute the migrations (usually the starting point of your server), import the lib and instantiate the migrator:
import DbMigrator from 'db-migrator-distributed';
const dbMigrator = new DbMigrator({ sequelizeConnection: mySequelizeConn });
try {
  await dbMigrator.run();
} catch (err) {
  process.exit(1); // migrations were unsuccessful
}- Set up your migration files dir and structure. The most typical one would be to have the /migrationsdir hold your migrations and put it right under the root source files dir, eg:myProject/src/migrations. Otherwise, you can specify the dir path in the init params of the DbMigrator constructor (see below for full list of possible params).
List possible init params
- sequelizeConnection {Sequelize}(mandatory) The Sequelize connection instance that you use to connect to your DB
- migrationsTable {string}(optional) The DB table where Umzug keeps track of the executed migrations so far. Default:- '_migrations'
- migrationsLockTable {string}(optional) The DB table that is going to be used for acquiring the migrations lock. Default:- '_migrations_lock'
- lockTimeoutSeconds {number}(optional) The time (in seconds) after which locks should expire. Default:- 60
- migrationsDirPath {string}(optional) The dir path where you store your migrations files. Default:- 'dist/migrations'. If you don't use Typescript or a separate- /distdir for the compiled TS files, then- distwon't make sense for you.
- migrationFilesPattern {RegEx | string}(optional) The regex by which Umzug will determine whether a file in your migrations dir is an actual migration file that is to be executed. Default:- /^\d+[\w-_]+\.js$/. This would match for example- 20200330092617-create-users-table.js
- extraMigrationFuncParams {any[]}(optional) Params, values, objects that you want to pass to your- up()and- down()migrations execution functions. By default, the first two params will be the Sequelize- queryInterfaceand the Sequelize instance.
- loggger {any}(optional) A logger that you want to use that the migrator will also use to log events. The default one is- bunyanand it's set up to log to the console, so you don't have to provide anything, if you wish.
TODO
- Finish support of Firestore migrations
- Add support for rollback functionality
- Test for other dialects, eg. MySQL