https://github.com/gvko/db-migrator-distributed
A tool for executing DB migrations based on Sequelize and Umzug, capable of doing migrations among multiple, distributed, synchronously launched instances, by acquiring a greedy lock on a migration table.
https://github.com/gvko/db-migrator-distributed
distributed-systems microservice microservices-architecture migrations sequelize sequelize-orm sequelizejs umzug
Last synced: 30 days ago
JSON representation
A tool for executing DB migrations based on Sequelize and Umzug, capable of doing migrations among multiple, distributed, synchronously launched instances, by acquiring a greedy lock on a migration table.
- Host: GitHub
- URL: https://github.com/gvko/db-migrator-distributed
- Owner: gvko
- License: mit
- Created: 2021-10-25T16:24:42.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-06-12T10:29:04.000Z (over 1 year ago)
- Last Synced: 2025-11-19T22:38:42.711Z (3 months ago)
- Topics: distributed-systems, microservice, microservices-architecture, migrations, sequelize, sequelize-orm, sequelizejs, umzug
- Language: TypeScript
- Homepage:
- Size: 163 KB
- Stars: 5
- Watchers: 1
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# db-migrator-distributed
# About
A tool for executing DB migrations based on [Umzug](https://www.npmjs.com/package/umzug) (
and [Sequelize](https://www.npmjs.com/package/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
1. Install the package:
```bash
npm i db-migrator-distributed
```
2. In the file where you want to execute the migrations (usually the starting point of your server), import the lib and
instantiate the migrator:
```typescript
import DbMigrator from 'db-migrator-distributed';
const dbMigrator = new DbMigrator({ sequelizeConnection: mySequelizeConn });
try {
await dbMigrator.run();
} catch (err) {
process.exit(1); // migrations were unsuccessful
}
```
3. Set up your migration files dir and structure. The most typical one would be to have the `/migrations` dir 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 `/dist` dir for the compiled TS files,
then `dist` won'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 `queryInterface`
and 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 `bunyan` and 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