loopback-db-migrate

A library to add simple database migration support to loopback projects. Migrations that have been run will be stored in a table called 'Migrations'. The library will read the loopback datasources.json files based on the NODE_ENV environment variable just

Usage no npm install needed!

<script type="module">
  import loopbackDbMigrate from 'https://cdn.skypack.dev/loopback-db-migrate';
</script>

README

A library to add simple database migration support to loopback projects. Migrations that have been run will be stored in a table called 'Migrations'. The library will read the loopback datasources.json files based on the NODE_ENV environment variable just like loopback does. The usage is based on the node-db-migrate project.

NOTE: This does not currently work with the loopback in memory DB.

CLI Usage

loopback-db-migrate [up|down|create] [options]

Down migrations are run in reverse run order.

Options:
  --datasource specify database name (optional, default: db)
  --since specify date to run migrations from (options, default: run all migrations)

Using the CLI directly

Run all new migrations that have not previously been run, using datasources.json and database 'db':

./node_modules/loopback-db-migrate/loopback-db-migrate.js up

Run all new migrations since 01012014 that have not previously been run, using datasources.json and datasources.qa.json and database 'my_db_name':

NODE_ENV=qa ./node_modules/loopback-db-migrate/loopback-db-migrate.js up --datasource my_db_name --since 01012014

Using the CLI with npm by updating your package.json

"scripts": {
  "migrate-db-up": "loopback-db-migrate up --datasource some_db_name",
  "migrate-db-down": "loopback-db-migrate down --datasource some_db_name"
}

npm run-script migrate-db-up
npm run-script migrate-db-down

NODE_ENV=production npm run-script migrate-db-up
NODE_ENV=production npm run-script migrate-db-down

Example migrations

module.exports = {
    up: function(dataSource, next) {
        dataSource.models.Users.create({ ... }, next);
    },
    down: function(dataSource, next) {
        dataSource.models.Users.destroy({ ... }, next);
    }
};
/* executing raw sql */
module.exports = {
    up: function(dataSource, next) {
        dataSource.connector.query('CREATE TABLE `my_table` ...;', next);
    },
    down: function(dataSource, next) {
        dataSource.connector.query('DROP TABLE `my_table`;', next);
    }
};