Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Migrate | 11,605 | 594 | 2 days ago | 129 | March 17, 2022 | 273 | other | Go | ||
Database migrations. CLI and Golang library. | ||||||||||
Flyway | 7,203 | 4,044 | 442 | 3 days ago | 156 | September 08, 2022 | 118 | apache-2.0 | Java | |
Flyway by Redgate • Database Migrations Made Easy. | ||||||||||
Pgloader | 4,469 | a month ago | 1 | February 27, 2018 | 295 | other | Common Lisp | |||
Migrate to PostgreSQL in a single command! | ||||||||||
Phinx | 4,376 | 3,494 | 437 | 8 days ago | 82 | January 21, 2022 | 137 | mit | PHP | |
PHP Database Migrations for Everyone | ||||||||||
Goose | 3,980 | 65 | 99 | 2 days ago | 46 | August 29, 2022 | 58 | other | Go | |
A database migration tool. Supports SQL migrations and Go functions. | ||||||||||
Dbmate | 3,432 | 1 | 10 days ago | 27 | March 25, 2022 | 16 | mit | Go | ||
:rocket: A lightweight, framework-agnostic database migration tool. | ||||||||||
Fluentmigrator | 2,955 | 548 | 130 | 4 days ago | 52 | January 14, 2022 | 221 | apache-2.0 | C# | |
Fluent migrations framework for .NET | ||||||||||
Express Typescript Boilerplate | 2,946 | a month ago | 94 | mit | TypeScript | |||||
A delightful way to building a RESTful API with NodeJs & TypeScript by @w3tecch | ||||||||||
Nyaa | 2,861 | 2 years ago | 61 | gpl-3.0 | Python | |||||
Bittorrent software for cats | ||||||||||
Simplebank | 2,594 | 1 | 2 months ago | 6 | April 11, 2021 | 4 | mit | Go | ||
Backend master class: build a simple bank service in Go |
Database migrations written in Go. Use as CLI or import as library.
Forked from mattes/migrate
Database drivers run migrations. Add a new database?
Database connection strings are specified via URLs. The URL format is driver dependent but generally has the form: dbdriver://username:[email protected]:port/dbname?param1=true¶m2=false
Any reserved URL characters need to be escaped. Note, the %
character also needs to be escaped
Explicitly, the following characters need to be escaped:
!
, #
, $
, %
, &
, '
, (
, )
, *
, +
, ,
, /
, :
, ;
, =
, ?
, @
, [
, ]
It's easiest to always run the URL parts of your DB connection URL (e.g. username, password, etc) through an URL encoder. See the example Python snippets below:
$ python3 -c 'import urllib.parse; print(urllib.parse.quote(input("String to encode: "), ""))'
String to encode: FAKEpassword!#$%&'()*+,/:;[email protected][]
FAKEpassword%21%23%24%25%26%27%28%29%2A%2B%2C%2F%3A%3B%3D%3F%40%5B%5D
$ python2 -c 'import urllib; print urllib.quote(raw_input("String to encode: "), "")'
String to encode: FAKEpassword!#$%&'()*+,/:;[email protected][]
FAKEpassword%21%23%24%25%26%27%28%29%2A%2B%2C%2F%3A%3B%3D%3F%40%5B%5D
$
Source drivers read migrations from local or remote sources. Add a new source?
$ migrate -source file://path/to/migrations -database postgres://localhost:5432/database up 2
$ docker run -v {{ migration dir }}:/migrations --network host migrate/migrate
-path=/migrations/ -database postgres://localhost:5432/database up 2
GracefulStop chan bool
.io.Reader
streams internally for low memory overhead.import (
"github.com/golang-migrate/migrate/v4"
_ "github.com/golang-migrate/migrate/v4/database/postgres"
_ "github.com/golang-migrate/migrate/v4/source/github"
)
func main() {
m, err := migrate.New(
"github://mattes:[email protected]/migrate_test",
"postgres://localhost:5432/database?sslmode=enable")
m.Steps(2)
}
Want to use an existing database client?
import (
"database/sql"
_ "github.com/lib/pq"
"github.com/golang-migrate/migrate/v4"
"github.com/golang-migrate/migrate/v4/database/postgres"
_ "github.com/golang-migrate/migrate/v4/source/file"
)
func main() {
db, err := sql.Open("postgres", "postgres://localhost:5432/database?sslmode=enable")
driver, err := postgres.WithInstance(db, &postgres.Config{})
m, err := migrate.NewWithDatabaseInstance(
"file:///migrations",
"postgres", driver)
m.Up() // or m.Step(2) if you want to explicitly set the number of migrations to run
}
Go to getting started
(more tutorials to come)
Each migration has an up and down migration. Why?
1481574547_create_users_table.up.sql
1481574547_create_users_table.down.sql
Best practices: How to write migrations.
Version | Supported? | Import | Notes |
---|---|---|---|
master | ✅ | import "github.com/golang-migrate/migrate/v4" |
New features and bug fixes arrive here first |
v4 | ✅ | import "github.com/golang-migrate/migrate/v4" |
Used for stable releases |
v3 | ❌ |
import "github.com/golang-migrate/migrate" (with package manager) or import "gopkg.in/golang-migrate/migrate.v3" (not recommended) |
DO NOT USE - No longer supported |
Yes, please! Makefile
is your friend,
read the development guide.
Also have a look at the FAQ.
Looking for alternatives? https://awesome-go.com/#database.