{"id":17766576,"url":"https://github.com/floatdrop/migratio","last_synced_at":"2025-06-16T04:37:51.888Z","repository":{"id":57296981,"uuid":"62410971","full_name":"floatdrop/migratio","owner":"floatdrop","description":"Automated migrations for 🐘","archived":false,"fork":false,"pushed_at":"2017-12-26T15:52:27.000Z","size":525,"stargazers_count":20,"open_issues_count":5,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-14T01:31:42.607Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/floatdrop.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"license","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-07-01T18:02:05.000Z","updated_at":"2023-09-25T12:32:51.000Z","dependencies_parsed_at":"2022-09-01T08:40:51.196Z","dependency_job_id":null,"html_url":"https://github.com/floatdrop/migratio","commit_stats":null,"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/floatdrop%2Fmigratio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/floatdrop%2Fmigratio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/floatdrop%2Fmigratio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/floatdrop%2Fmigratio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/floatdrop","download_url":"https://codeload.github.com/floatdrop/migratio/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243507736,"owners_count":20301885,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-26T20:32:46.622Z","updated_at":"2025-03-15T13:30:50.780Z","avatar_url":"https://github.com/floatdrop.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n\t\u003cbr\u003e\n\t\u003cimg width=\"400\" src=\"https://rawgit.com/floatdrop/migratio/master/media/logotype.png\" alt=\"migratio\"\u003e\n\t\u003cbr\u003e\n\t\u003cbr\u003e\n\t\u003cbr\u003e\n\u003c/h1\u003e\n\n\u003e Automated migrations for Postgres\n\n[![Build Status](https://travis-ci.org/floatdrop/migratio.svg?branch=master)](https://travis-ci.org/floatdrop/migratio)\n\n## Install\n\n```\n$ npm install --save migratio\n```\n\n\n## Usage\n\nCreate directory `migrations` with [migrations](#migrations-format) and use migratio:\n\n```js\nconst migratio = require('migratio');\n\nawait migratio.current({\n\tconnection: 'postgres://localhost/db',\n\tverbose: true\n});\n//   000005-images.sql  (batch:3)\n//   000004-files.sql   (batch:3)\n//   000003-stats.sql   (batch:3)\n\nawait migratio.up({\n\tconnection: 'postgres://localhost/db',\n\tverbose: true\n});\n// ↑ 000006-posts.sql   (batch:4)\n\nawait migratio.down({\n\tconnection: 'postgres://localhost/db',\n\tverbose: true\n});\n// ↓ 000005-images.sql  (batch:3)\n// ↓ 000004-files.sql   (batch:3)\n// ↓ 000003-stats.sql   (batch:3)\n```\n\n## Migrations format\n\nAll 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.\n\nMigrations will be applied in order of numbers in front of filename.\n\nMigration process is running in transaction with lock on `migrations` table. If one of migrations failed – all batch will be reverted.\n\n### JavaScript format\n\nMigration file with extension `.js` is treated as module, that exports two functions:\n\n- `up` – contains code to apply migration\n- `down` – contains code to revert migration\n\nThese functions must return Promise. If these functions are generators, they will be wrapped in `co`.\n\n```js\nexports.up = async function (db) {\n\tawait db.query(`\n\t\tCREATE TABLE test (\n\t\t\tid serial PRIMARY KEY\n\t\t)\n\t`);\n};\n\nexports.down = async function (db) {\n\tawait db.query(`\n\t\tDROP TABLE IF EXISTS test;\n\t`);\n};\n```\n\n### SQL format\n\nMigration 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`.\n\n```sql\n-- +migrate Up\n\nCREATE TABLE test (\n\tid serial PRIMARY KEY\n);\n\n-- +migrate Down\n\nDROP TABLE IF EXISTS test;\n```\n\n## Configuring defaults\n\nMigratio supports overriding default values with `migraio` section in `package.json`:\n\n```js\n{\n\t\"migratio\": {\n\t\t\"directory\": \"migrations\",\n\t\t\"tableName\": \"migrations\"\n\t}\n}\n```\n\n## API\n\n### up(options)\n\nApplies all migrations from current to latest available.\n\n#### options\n\n##### connection\n\nType: `string`\u003cbr\u003e\nDefault: `process.env.DATABASE_URL`\n\nConnection string to Postgres database.\n\n\n##### db\n\nType: `Database`\n\n[Database](http://vitaly-t.github.io/pg-promise/Database.html) object. Will be used _instead_ of `connection`.\n\n\n##### directory\n\nType: `string`\u003cbr\u003e\nDefault: `./migrations`\n\nDirectory with migrations.\n\n##### revision\n\nType: `Number`\u003cbr\u003e\nDefault: `Infinity`\n\nLatest revision to up to.\n\n##### unsafe\n\nType: `Boolean`\u003cbr\u003e\nDefault: `false`\n\nDisables meta-table locking.\n\n##### verbose\n\nType: `boolean`\u003cbr\u003e\nDefault: `false`\n\nEnables output.\n\n##### tableName\n\nType: `string`\u003cbr\u003e\nDefault: `migratio`\n\nTable in which migratio will store metadata.\n\n### down(options)\n\nRollbacks migrations in current batch.\n\n#### options\n\n##### connection\n\nType: `string`\u003cbr\u003e\nDefault: `process.env.DATABASE_URL`\n\nConnection string to Postgres database.\n\n##### directory\n\nType: `string`\u003cbr\u003e\nDefault: `./migrations`\n\nDirectory with migrations.\n\n##### unsafe\n\nType: `Boolean`\u003cbr\u003e\nDefault: `false`\n\nDisables meta-table locking.\n\n##### verbose\n\nType: `boolean`\u003cbr\u003e\nDefault: `false`\n\nEnables output.\n\n##### tableName\n\nType: `string`\u003cbr\u003e\nDefault: `migratio`\n\nTable in which migratio will store metadata.\n\n### current(options)\n\nShows current batch.\n\n##### connection\n\nType: `string`\u003cbr\u003e\nDefault: `process.env.DATABASE_URL`\n\nConnection string to Postgres database.\n\n##### unsafe\n\nType: `Boolean`\u003cbr\u003e\nDefault: `false`\n\nDisables meta-table locking.\n\n##### verbose\n\nType: `boolean`\u003cbr\u003e\nDefault: `false`\n\nEnables output.\n\n##### revision\n\nType: `Number`\u003cbr\u003e\nDefault: `Infinity`\n\nFirst revision to show info about.\n\n##### tableName\n\nType: `string`\u003cbr\u003e\nDefault: `migratio`\n\nTable in which migratio will store metadata.\n\n## CLI\n\n```\n$ npm install --global migratio\n```\n\n```\n$ migratio --help\n\n  Usage\n    migratio [command] [options]\n\n  Options\n    -d, --directory    Directory with migrations files [Default: ./migrations]\n    -c, --connection   Connection string to Postgres [Default: $DATABASE_URL]\n    -r, --revision     Specify revision to up/down to\n    -t, --table        Table name for metadata [Default: migratio]\n    -s, --schema       Schema name for table with metadata [Default: public]\n    --unsafe           Skip transaction and table locking\n\n  Commands\n\n    up             Applies all migrations from current to latest\n    down           Rollbacks all migrations in current batch\n    current        Shows migrations in current batch\n\n  Examples\n    $ migratio\n\n      Current batch:\n        000005-images.sql  (batch:3)\n        000004-files.sql   (batch:3)\n        000003-stats.sql   (batch:3)\n\n    $ migratio down\n\n      ↓ 000005-images.sql  (batch:3)\n      ↓ 000004-files.sql   (batch:3)\n      ↓ 000003-stats.sql   (batch:3)\n\n    $ migratio up\n\n      ↑ 000003-stats.sql   (batch:3)\n      ↑ 000004-files.sql   (batch:3)\n      ↑ 000005-images.sql  (batch:3)\n      ↑ 000006-posts.sql   (batch:3)\n```\n\n\n## License\n\nMIT © [Vsevolod Strukchinsky](http://github.com/floatdrop)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffloatdrop%2Fmigratio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffloatdrop%2Fmigratio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffloatdrop%2Fmigratio/lists"}