A simple forwards only migration solution for postgres.js.
postgres-shift
shift()
postgres-shift exports a single function which is used to start migrations.
It expects a postgres.js sql database object to run migrations with.
Example
- Create
migrationsdirectory with following structure
.
└── migrations
├── 00001_initial
│ └── index.sql
├── 00002_update
│ └── index.js
└── 00003_delete
└── index.sql
Note that migration folder name expects 5 digits. This is very important detail.
- Create actual migrations. Note that it can be either in SQL or JS syntax
create table test ( a text, b int )
export default async function(sql) { await sql` alter table test add column c timestamp with time zone ` await sql` insert into test (a, b, c) values ('hello', 9, ${ new Date() }) ` }
- Create your
migrate.jsscript:
import shift from 'postgres-shift'; import postgres from 'postgres'; import { fileURLToPath } from 'url'; const { DB_HOST, DB_PORT, DB_NAME, ADMIN_DB_USER, ADMIN_DB_PASSWORD, } = process.env; export const sql = postgres({ host: DB_HOST, port: Number(DB_PORT), database: DB_NAME, user: ADMIN_DB_USER, pass: ADMIN_DB_PASSWORD, idle_timeout: 1, }); shift({ sql, path: fileURLToPath(new URL('migrations', import.meta.url)), before: ({ migration_id, name }) => { console.log('Migrating', migration_id, name); }, }) .then(() => console.log('All good')) .catch((err) => { console.error('Failed', err); process.exit(1); });
- Run it with