Migraciones de bases de datos escritas en GO. Use como CLI o importar como biblioteca.
Bifurcado de mates/migración
Los controladores de la base de datos ejecutan migraciones. ¿Agregar una nueva base de datos?
Las cadenas de conexión de la base de datos se especifican a través de URL. El formato de URL depende del controlador, pero generalmente tiene la forma: dbdriver://username:password@host:port/dbname?param1=true¶m2=false
Cualquier personaje de URL reservado debe ser escapado. Tenga en cuenta que el carácter % también debe escaparse
Explícitamente, los siguientes caracteres deben ser escapados : ! , # , $ , % , & , ' , ( , ) , * , + , / , : , ; , = , ? , @ , [ , ]
Es más fácil ejecutar siempre las partes de URL de su URL de conexión DB (por ejemplo, nombre de usuario, contraseña, etc.) a través de un codificador de URL. Vea el ejemplo de fragmentos de Python a continuación:
$ 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
$Los conductores de origen leen migraciones de fuentes locales o remotas. ¿Agregar una nueva fuente?
Documentación de 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 una sobrecarga de memoria baja.Documentación de 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 )
}¿Quieres usar un cliente de base de datos 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 a comenzar
(más tutoriales por venir)
Cada migración tiene una migración hacia arriba y hacia abajo. ¿Por qué?
1481574547_create_users_table.up.sql
1481574547_create_users_table.down.sqlLas mejores prácticas: cómo escribir migraciones.
Echa un vistazo a Migradaptor. Nota: Migradaptor no está afiliado ni respaldado por este proyecto
| Versión | Compatible? | Importar | Notas |
|---|---|---|---|
| maestro | ✅ | import "github.com/golang-migrate/migrate/v4" | Nuevas características y correcciones de errores llegan aquí primero |
| v4 | ✅ | import "github.com/golang-migrate/migrate/v4" | Utilizado para lanzamientos estables |
| v3 | import "github.com/golang-migrate/migrate" (con el administrador de paquetes) o import "gopkg.in/golang-migrate/migrate.v3" (no recomendado) | No lo use , ya no es compatible |
¡Sí, por favor! Makefile es tu amigo, lee la guía de desarrollo.
También eche un vistazo a las preguntas frecuentes.
¿Buscas alternativas? https://awesome-go.com/#database.