Automated migrations for Postgres
$ npm install --save migratio
Create directory migrations
with migrations and use migratio:
const migratio = require('migratio');
await migratio.current({
connection: 'postgres://localhost/db',
verbose: true
});
// 000005-images.sql (batch:3)
// 000004-files.sql (batch:3)
// 000003-stats.sql (batch:3)
await migratio.up({
connection: 'postgres://localhost/db',
verbose: true
});
// β 000006-posts.sql (batch:4)
await migratio.down({
connection: 'postgres://localhost/db',
verbose: true
});
// β 000005-images.sql (batch:3)
// β 000004-files.sql (batch:3)
// β 000003-stats.sql (batch:3)
All migrations files should start with revision (digits) followed by -
and name of migration. For example 000001-init.js
and 000002-users.sql
is valid file names.
Migrations will be applied in order of numbers in front of filename.
Migration process is running in transaction with lock on migrations
table. If one of migrations failed β all batch will be reverted.
Migration file with extension .js
is treated as module, that exports two functions:
up
β contains code to apply migrationdown
β contains code to revert migration
These functions must return Promise. If these functions are generators, they will be wrapped in co
.
exports.up = async function (db) {
await db.query(`
CREATE TABLE test (
id serial PRIMARY KEY
)
`);
};
exports.down = async function (db) {
await db.query(`
DROP TABLE IF EXISTS test;
`);
};
Migration file with extension .sql
is treated as file with SQL instructions. Instructions to apply migration should be placed after -- +migrate Up
and instructions to revert migration should be placed after -- +migrate Down
.
-- +migrate Up
CREATE TABLE test (
id serial PRIMARY KEY
);
-- +migrate Down
DROP TABLE IF EXISTS test;
Migratio supports overriding default values with migraio
section in package.json
:
{
"migratio": {
"directory": "migrations",
"tableName": "migrations"
}
}
Applies all migrations from current to latest available.
Type: string
Default: process.env.DATABASE_URL
Connection string to Postgres database.
Type: Database
Database object. Will be used instead of connection
.
Type: string
Default: ./migrations
Directory with migrations.
Type: Number
Default: Infinity
Latest revision to up to.
Type: Boolean
Default: false
Disables meta-table locking.
Type: boolean
Default: false
Enables output.
Type: string
Default: migratio
Table in which migratio will store metadata.
Rollbacks migrations in current batch.
Type: string
Default: process.env.DATABASE_URL
Connection string to Postgres database.
Type: string
Default: ./migrations
Directory with migrations.
Type: Boolean
Default: false
Disables meta-table locking.
Type: boolean
Default: false
Enables output.
Type: string
Default: migratio
Table in which migratio will store metadata.
Shows current batch.
Type: string
Default: process.env.DATABASE_URL
Connection string to Postgres database.
Type: Boolean
Default: false
Disables meta-table locking.
Type: boolean
Default: false
Enables output.
Type: Number
Default: Infinity
First revision to show info about.
Type: string
Default: migratio
Table in which migratio will store metadata.
$ npm install --global migratio
$ migratio --help
Usage
migratio [command] [options]
Options
-d, --directory Directory with migrations files [Default: ./migrations]
-c, --connection Connection string to Postgres [Default: $DATABASE_URL]
-r, --revision Specify revision to up/down to
-t, --table Table name for metadata [Default: migratio]
-s, --schema Schema name for table with metadata [Default: public]
--unsafe Skip transaction and table locking
Commands
up Applies all migrations from current to latest
down Rollbacks all migrations in current batch
current Shows migrations in current batch
Examples
$ migratio
Current batch:
000005-images.sql (batch:3)
000004-files.sql (batch:3)
000003-stats.sql (batch:3)
$ migratio down
β 000005-images.sql (batch:3)
β 000004-files.sql (batch:3)
β 000003-stats.sql (batch:3)
$ migratio up
β 000003-stats.sql (batch:3)
β 000004-files.sql (batch:3)
β 000005-images.sql (batch:3)
β 000006-posts.sql (batch:3)
MIT Β© Vsevolod Strukchinsky