grunt-node-pg-migrate
Migrate PostgreSQL database schema and data with node-pg-migrate
Getting started
Install with npm:
npm i grunt-node-pg-migrate --save
You may want to start with simple configuration:
migrate: { options: { env: { DATABASE_URL: databaseUrl }, verbose: true } }
where databaseUrl
may be exctracted from your environment config like this:
var CONF = require('config'), databaseUrl = 'postgres://' + CONF.db.user + ':' + CONF.db.password + '@' + CONF.db.host + ':5432/' + CONF.db.name;
Create migration with command line command:
$ grunt migrate:create:migrate_name
It generates a new file based on template in your 'migrations' folder (see configuration section). For example, edit this file, using async
library:
/* global exports, require */ var async = require('async');exports.up = function (db, callback) { async.series([ db.createTable.bind(db, 'users', { id: { type: 'int', primaryKey: true, autoIncrement: true }, email: { type: 'string', unique: true, notNull: true }, password: 'string', created_at: 'datetime', updated_at: 'datetime' }), db.createTable.bind(db, 'items', { id: { type: 'int', primaryKey: true, autoIncrement: true }, user_id: 'int', published: 'boolean', title: 'string' }) ], callback);}; exports.down = function (db, callback) { async.series([ db.dropTable.bind(db, 'users', { ifExists: true }), db.dropTable.bind(db, 'items', { ifExists: true }) ], callback);};
And then run the migration step up with grunt migration
command.
Targets
migration:up
- run all available migrations up (or just migration
). For example, to update database to specified migration run `grunt migration:up
migration:down
- run one migration down
migration:create:%name%
- create the new migration javascript file from template
Configuration
env
Environment variables for running db-migrate
.
dir
Default migrations folder is migrations
. But you can choose another:
migrate : {
options: {
dir: 'db/schema-migrations'
}
}
verbose
Verbose output migration process.
Other params
You could use any of db-migrate
params.
Useful examples
Clean DB
grunt.registerTask('cleandb', 'Clean db and re-apply all migrations', function () { var fs = require('fs'); var files = fs.readdirSync('./migrations'); for (var i = 0; i < files.length; i++) { grunt.task.run('migrate:down'); } grunt.task.run('migrate:up'); });