README
¶
migrate
Database migrations written in Go. Use as CLI or import as library.
go get -u -tags 'postgres' -o migrate github.com/mattes/migrate/cli
import (
"github.com/mattes/migrate"
_ "github.com/mattes/migrate/database/postgres"
)
Databases
Database drivers are responsible for applying migrations to databases. Implementing a new database driver is easy. Just implement database/driver interface
Migration Sources
Source Drivers read migrations from various locations. Implementing a new source driver is easy. Just implement the source/driver interface.
- Filesystem - read from fileystem (always included)
- Go-Bindata - read from embedded binary data (jteeuwen/go-bindata)
- Github - read from remote Github repositories
- AWS S3 - read from Amazon Web Services S3
- Google Cloud Storage - read from Google Cloud Platform Storage
CLI usage
# dowload, build and install the CLI tool
# -tags takes database and source drivers and will only build those
$ go get -u -tags 'postgres' -o migrate github.com/mattes/migrate/cli
$ migrate -help
Usage: migrate OPTIONS COMMAND [arg...]
migrate [ -version | -help ]
Options:
-source Location of the migrations (driver://url)
-path Shorthand for -source=file://path
-database Run migrations against this database (driver://url)
-prefetch N Number of migrations to load in advance before executing (default 10)
-verbose Print verbose logging
-version Print version
-help Print usage
Commands:
goto V Migrate to version V
up [N] Apply all or N up migrations
down [N] Apply all or N down migrations
drop Drop everyting inside database
version Print current migration version
# so let's say you want to run the first two migrations
migrate -database postgres://localhost:5432/database up 2
# if your migrations are hosted on github
migrate -source github://mattes:personal-access-token@mattes/migrate_test \
-database postgres://localhost:5432/database down 2
Use in your Go project
import (
"github.com/mattes/migrate/migrate"
_ "github.com/mattes/migrate/database/postgres"
_ "github.com/mattes/migrate/source/github"
)
func main() {
m, err := migrate.New("github://mattes:personal-access-token@mattes/migrate_test",
"postgres://localhost:5432/database?sslmode=enable")
m.Steps(2)
}
Migration files
Each migration version has an up and down migration.
1481574547_create_users_table.up.sql
1481574547_create_users_table.down.sql
Development, Testing and Contributing
- Make sure you have a running Docker daemon (Install for MacOS)
- Fork this repo and
git clone
somewhere to$GOPATH/src/github.com/%you%/migrate
make rewrite-import-paths
to update imports to your local fork- Confirm tests are working:
make test-short
- Write awesome code ...
make test
to run all tests against all database versionsmake restore-import-paths
to restore import paths- Push code and open Pull Request
Some more notes:
- You can specify which database/ source tests to run:
make test-short SOURCE='file go-bindata' DATABASE='postgres cassandra'
- After
make test
, runmake html-coverage
which opens a shiny test coverage overview. - Missing imports?
make deps
make build-cli
builds the CLI in directorycli/build/
.make list-external-deps
lists all external dependencies for each package
Alternatives
Documentation
¶
Index ¶
- Variables
- type ErrShortLimit
- type Logger
- type Migrate
- func New(sourceUrl, databaseUrl string) (*Migrate, error)
- func NewWithDatabaseInstance(sourceUrl string, databaseName string, databaseInstance database.Driver) (*Migrate, error)
- func NewWithInstance(sourceName string, sourceInstance source.Driver, databaseName string, ...) (*Migrate, error)
- func NewWithSourceInstance(sourceName string, sourceInstance source.Driver, databaseUrl string) (*Migrate, error)
- type Migration
- type MultiError
Constants ¶
This section is empty.
Variables ¶
View Source
var ( ErrNoChange = fmt.Errorf("no change") ErrNilVersion = fmt.Errorf("no migration") ErrLocked = fmt.Errorf("database locked") )
View Source
var DefaultBufferSize = uint(100000)
View Source
var DefaultPrefetchMigrations = uint(10)
View Source
var ErrNoName = fmt.Errorf("no name")
Functions ¶
This section is empty.
Types ¶
type ErrShortLimit ¶
type ErrShortLimit struct {
Short uint
}
func (ErrShortLimit) Error ¶
func (e ErrShortLimit) Error() string
type Migrate ¶
type Migrate struct { Log Logger GracefulStop chan bool PrefetchMigrations uint // contains filtered or unexported fields }
func NewWithDatabaseInstance ¶
func NewWithInstance ¶
func NewWithSourceInstance ¶
type Migration ¶
type Migration struct { Identifier string Version uint TargetVersion int Body io.ReadCloser BufferedBody io.Reader BufferSize uint Scheduled time.Time StartedBuffering time.Time FinishedBuffering time.Time FinishedReading time.Time BytesRead int64 // contains filtered or unexported fields }
func NewMigration ¶
func (*Migration) StringLong ¶
type MultiError ¶
type MultiError struct {
Errs []error
}
func NewMultiError ¶
func NewMultiError(errs ...error) MultiError
func (MultiError) Error ¶
func (m MultiError) Error() string
Directories
¶
Path | Synopsis |
---|---|
Deprecated: package migrate is here to make sure v2 is downwards compatible with v1
|
Deprecated: package migrate is here to make sure v2 is downwards compatible with v1 |
Click to show internal directories.
Click to hide internal directories.