migration script for node.js and postgres
JavaScript
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
test
.editorconfig
.eslintrc.json
.gitignore
README.md
add-migration.js
cli.js
migrate.js
package.json

README.md

pgmigrate

Migration tool for postgres databases in node.js. pgmigrate helps you to migrate your schema for postgres.

  • use it from cli or via javascript
  • zero dependencies
  • tested code

usage

It is possible to use pgmigrate via cli tools are programmatically. node_modules/.bin contains add-migration and migrate.

add-migration

add-migration <name> will add a migration file to schema/$timestamp-$name.sql. Custom SQl can be written into this file.

migrate via the cli

migrate will execute all sql files in schema which are not yet executed.

Usage:

DATABASE_URL=postgres://user:pass@server/database node_modules/.bin/migrate

Adding --sync will truncate the database before running migrate.

DATABASE_URL=postgres://user:pass@server/database node_modules/.bin/migrate --sync

migrate via code

const pg = require('pg');
const migrate = require('pgmigrate');
const getConnection = cb => pg.connect(process.env.DATABASE_URL, cb);
migrate('path/to/schema', getConnection, {isSync: false})
  .then(console.log)
  .catch(console.error);

technical implementation

pgmigrate adds a schema table to your database called schema_info. In schema_info all filenames of all already executed schema migrations are persisted. As soon as a schema is executed successful, the filename is added to this table.

All sql files in path_to_migrations which are not yet in the database are executed. After successful execution the timestamp of the migration file is added to the schema_info table.

The format of the migrations files should be $iso8601-description.sql

YYYY-MM-DDTHH:MM:SSZ-description.sql

Hooks

Sometimes you want to execute sql logic always before and/or after you run your migrations. In this case you can add pre and post hooks to your schema folder.

For a prehook use a filename with this pattern: 0000-00-00T00:00:00:000Z-$description.sql For a posthook use a filename with this pattern: 9999-99-99T99:99:99:999Z-$description.sql

License MIT