Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jaemk/migrant
Migration management for PostgreSQL/SQLite/MySQL
https://github.com/jaemk/migrant
database database-migrations migrations mysql postgres rust sqlite
Last synced: 18 days ago
JSON representation
Migration management for PostgreSQL/SQLite/MySQL
- Host: GitHub
- URL: https://github.com/jaemk/migrant
- Owner: jaemk
- License: mit
- Created: 2016-12-11T02:12:55.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2021-03-24T04:18:10.000Z (over 3 years ago)
- Last Synced: 2024-10-13T05:08:29.923Z (about 1 month ago)
- Topics: database, database-migrations, migrations, mysql, postgres, rust, sqlite
- Language: Rust
- Homepage:
- Size: 335 KB
- Stars: 88
- Watchers: 3
- Forks: 6
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Migrant
[![Build Status](https://travis-ci.org/jaemk/migrant.svg?branch=master)](https://travis-ci.org/jaemk/migrant)
[![crates.io:migrant](https://img.shields.io/crates/v/migrant.svg?label=migrant)](https://crates.io/crates/migrant)> Basic migration manager powered by [`migrant_lib`](https://github.com/jaemk/migrant_lib)
**Supported databases/features:**
| Feature | Backend |
|---------------|---------------------------------------|
| `postgres` | Enable postgres connectivity |
| `sqlite` | Enable sqlite connectivity |
| `mysql` | Enable mysql connectivity |
| `update` | Enable `self-update` functionality |`migrant` will manage all migrations that live under `/migrations/`, where `project-dir` is the closest
parent path that contains a `Migrant.toml` configuration file (`....//Migrant.toml`).
The default migration file location can be modified in your `Migrant.toml` file (`"migration_location"`).
If the `migration_location` directory doesn't exist, it will be created the first time you create a new migration.
`migrant` stores all applied migrations in a database table named `__migrant_migrations`.*Note:* Configuration values prefixed with `env:` in your `Migrant.toml` will be sourced from environment variables.
For example, `database_user = "env:DB_USER"` will use the value of the environment variable `DB_USER`.
If a `.env.` file exists, it will be "sourced" automatically before your `Migrant.toml` is loaded.*Note:* SQL statements are batch executed as is. If you want your migration to happen atomically in a
transaction you must manually wrap your statements in a transaction (`begin transaction; ... commit;`).### Installation
**Binary releases:**
See [releases](https://github.com/jaemk/migrant/releases) for binaries. If you've already installed a binary release, you can update to the latest release via `migrant self update`.
**Building from source:**
By default `migrant` will build without any features, falling back to using each database's `cli` commands
(`psql` / `sqlite3` / `mysqlsh`).
The `postgres`, `rusqlite`, and `mysql` database driver libraries can be activated with their respective feature flags.
Note, Some drivers require their dev libraries (`postgresql`: `libpq-dev`, `sqlite`: `libsqlite3-dev`).
[Self update](https://github.com/jaemk/self_update) functionality (updating to the latest GitHub release) is available behind the `update` feature.
The binary releases are built with all features.**Building from source (`crates.io`):**
```shell
# install without features
# use cli commands for all db interaction
cargo install migrant# install with `postgres`
cargo install migrant --features postgres# install with `rusqlite`
cargo install migrant --features sqlite# all
cargo install migrant --features 'postgres sqlite mysql update'
```### Simple Usage
`migrant init [--type , --location , --no-confirm]` - Initialize project by creating a `Migrant.toml` file with db info/credentials.
When run interactively (without `--no-confirm`), `setup` will be run automatically.`migrant setup` - Verify database info/credentials and setup a `__migrant_migrations` table if missing.
`migrant new ` - Generate new up & down files with the given `` under the specified `migration_location`.
`migrant edit [--down]` - Edit the `up` [or `down`] migration file with the given ``.
`migrant list` - Display all available .sql files and mark those applied.
`migrant apply [--down, --all, --force, --fake]` - Apply the next available migration[s].
`migrant shell` - Open a repl
`migrant which-config` - Display the full path of the `Migrant.toml` file being used
`migrant connect-string` - Display either the connection-string generated from config-params or the database-path for sqlite
`migrant self update` - Update to the latest version released on GitHub.
`migrant self bash-completions install [--path ]` - Generate a bash completion script and save it to the default or specified path.
### Usage as a library
See [`migrant_lib`](https://github.com/jaemk/migrant_lib) and
[examples](https://github.com/jaemk/migrant_lib/tree/master/examples).
`migrant` itself is just a thin wrapper around `migrant_lib`, so the full functionality of migration management
can be embedded in your actual project.### Development
See [CONTRIBUTING](https://github.com/jaemk/migrant/blob/master/CONTRIBUTING.md)
### Docker
An image with the binary installed is available at `jaemk/migrant:latest`