Миграции базы данных написаны в Go. Используйте как CLI или импорт в качестве библиотеки.
Разветвляется от маттс/мигрировать
Драйверы базы данных запускают миграции. Добавить новую базу данных?
Строки подключения базы данных указаны через URL -адреса. Формат URL зависит от драйвера, но обычно имеет форму: dbdriver://username:password@host:port/dbname?param1=true¶m2=false
Любые зарезервированные символы URL должны быть сбежать. Обратите внимание, что символ % также должен быть сбежал
Ясно, что следующих символов нужно избежать ! , # , $ , % , & , ' , ( , ) , * , + , / : : ; , = ? , @ , [ , ]
Легче всего запускать URL -части URL -адреса URL -адреса подключения (например, имя пользователя, пароль и т. Д.) через URL -энкодер. См. Пример фрагментов Python ниже:
$ 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
$Драйверы источников читают миграции из местных или отдаленных источников. Добавить новый источник?
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 Internal для низких накладных расходов на память.GO документация
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 )
}Хотите использовать существующий клиент базы данных?
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
}Иди, чтобы начать
(Больше учебников в будущем)
Каждая миграция имеет миграцию вверх и вниз. Почему?
1481574547_create_users_table.up.sql
1481574547_create_users_table.down.sqlЛучшие практики: как писать миграции.
Проверьте миградаптор. Примечание: миградаптор не связан и не поддерживается этим проектом
| Версия | Поддерживается? | Импорт | Примечания |
|---|---|---|---|
| владелец | ✅ | import "github.com/golang-migrate/migrate/v4" | Новые функции и исправления ошибок прибывают здесь первым |
| V4 | ✅ | import "github.com/golang-migrate/migrate/v4" | Используется для стабильных выпусков |
| v3 | import "github.com/golang-migrate/migrate" (с менеджером пакетов) или import "gopkg.in/golang-migrate/migrate.v3" (не рекомендуется) | Не используйте - больше не поддерживается |
Да, пожалуйста! Makefile - ваш друг, прочитайте руководство по разработке.
Также посмотрите на FAQ.
Ищете альтернативы? https://awesome-go.com/#database.