Skip to content
/ podil Public

Lightweight and secure database schema migration tool 🎯

License

Notifications You must be signed in to change notification settings

podiljs/podil

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

28 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Podil Build Coverage Status npm version install size

Lightweight and secure database migration tool for Node.js and Postgres. Podil lets you version your database schema by executing SQL scripts automatically on application startup. It keeps track of what scripts have been executed and what not which lets you seamlessly update your database schema on every environment in the same way. Podil saves you from mistakingly breaking your schema by storing and verifying checksums of every script that it executed. Podil strives at being simple and minimalistic, that's why it brings no dependencies except for Podil itself.

How to use

Install Podil and pg:

npm install podil pg

Create a migrations folder in the folder from which you start your application (usually the project root) and add .sql scripts to it.

.
β”œβ”€β”€ migrations
β”‚   β”œβ”€β”€ 001__init_schema.sql
β”‚   β”œβ”€β”€ 002__add_orders_table.sql
β”‚   └── 003__add_order_status_column.sql

In the code, import podil:

import { podil } from 'podil';

Add the migration call at the entry point of your application:

await podil.migrate('postgres://podil:podil@localhost:5432/podil');

This will execute all migrations. Note, the SQL files will be executed in the lexicographical order.

Configuration

Podil can be configured to look for migration scripts in an arbitrary location. By default, it looks for migrations in ./migrations, you can pass a custom folder in the following way:

await podil.migrate(
    connectionString,
    { migrationsDir: '/path/to/your/migrations' },
);

It is recommended to verify the checksums of your scripts on every run. However, you can disable checksum verification using the verifyChecksum property:

await podil.migrate(
  connectionString,
  { verifyChecksum: false },
);

Troubleshooting

Podil is in active development. If you found a bug, have a question or want to request a new feature, please open an issue.