Migrações de banco de dados escritas em Go. Use como CLI ou importação como biblioteca.
Bifurcado de Mattes/Migre
Os drivers de banco de dados executam migrações. Adicionar um novo banco de dados?
As cadeias de conexão do banco de dados são especificadas via URLs. O formato URL depende do driver, mas geralmente tem o formulário: dbdriver://username:password@host:port/dbname?param1=true¶m2=false
Quaisquer caracteres de URL reservados precisam ser escapados. Observe que o caráter % também precisa ser escapado
Explicitamente, os seguintes personagens precisam ser escapados : ! , # , $ , % , & , ' , ( , ) , * , + , / , : , ; , = , ? , @ , [ , ]
É mais fácil executar sempre as partes do URL do seu URL de conexão com banco de dados (por exemplo, nome de usuário, senha etc.) através de um codificador de URL. Veja o exemplo dos trechos Python abaixo:
$ python3 -c ' import urllib.parse; print(urllib.parse.quote(input("String to encode: "), "")) '
String to encode: FAKEpassword!#$%&' () * +,/:;= ? @[]
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!#$%&' () * +,/:;= ? @[]
FAKEpassword%21%23%24%25%26%27%28%29%2A%2B%2C%2F%3A%3B%3D%3F%40%5B%5D
$Os drivers de origem leem migrações de fontes locais ou remotas. Adicionar uma nova fonte?
Documentação da CLI
$ 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 2GracefulStop chan bool .io.Reader internamente para baixa sobrecarga de memória.Documentação vá
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:personal-access-token@mattes/migrate_test" ,
"postgres://localhost:5432/database?sslmode=enable" )
m . Steps ( 2 )
}Deseja usar um cliente de banco de dados existente?
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.Steps(2) if you want to explicitly set the number of migrations to run
}Ir para começar
(mais tutoriais por vir)
Cada migração tem uma migração para cima e para baixo. Por que?
1481574547_create_users_table.up.sql
1481574547_create_users_table.down.sqlMelhores práticas: como escrever migrações.
Confira migraptor. NOTA: Migravaptor não é afiliado ou apoiado por este projeto
| Versão | Suportado? | Importar | Notas |
|---|---|---|---|
| mestre | ✅ | import "github.com/golang-migrate/migrate/v4" | Novos recursos e correções de bugs chegam aqui primeiro |
| v4 | ✅ | import "github.com/golang-migrate/migrate/v4" | Usado para lançamentos estáveis |
| v3 | import "github.com/golang-migrate/migrate" (com gerenciador de pacotes) ou import "gopkg.in/golang-migrate/migrate.v3" (não recomendado) | Não use - não mais suportado |
Sim, por favor! Makefile é seu amigo, leia o guia de desenvolvimento.
Também dê uma olhada nas perguntas frequentes.
Procurando alternativas? https://awesome-go.com/#database.