Planificación de una migración
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Los cambios descritos en esta sección pueden consultarse en PR #6 del repositorio de soporte.
Planificación de una migración
En esta sección, veremos cómo planificar una nueva migración de esquema cuando
realizamos cambios en el esquema Ent de nuestro proyecto. Supongamos que queremos añadir
un nuevo campo a nuestra entidad User, agregando un campo opcional llamado title:
// Fields of the User.
func (User) Fields() []ent.Field {
return []ent.Field{
field.String("name"),
field.String("email"). // <-- Our new field
Unique(),
field.String("title").
Optional(),
}
}
Tras añadir el nuevo campo, debemos regenerar el código de nuestro proyecto:
go generate ./...
A continuación, necesitamos crear un nuevo archivo de migración para nuestro cambio usando la CLI de Atlas:
- MySQL
- MariaDB
- PostgreSQL
- SQLite
atlas migrate diff add_user_title \
--dir "file://ent/migrate/migrations" \
--to "ent://ent/schema" \
--dev-url "docker://mysql/8/ent"
atlas migrate diff add_user_title \
--dir "file://ent/migrate/migrations" \
--to "ent://ent/schema" \
--dev-url "docker://mariadb/latest/test"
atlas migrate diff add_user_title \
--dir "file://ent/migrate/migrations" \
--to "ent://ent/schema" \
--dev-url "docker://postgres/15/test?search_path=public"
atlas migrate diff add_user_title \
--dir "file://ent/migrate/migrations" \
--to "ent://ent/schema" \
--dev-url "sqlite://file?mode=memory&_fk=1"
Observa que se ha creado un nuevo archivo llamado 20221115101649_add_user_title.sql en
el directorio ent/migrate/migrations/. Este archivo contiene las sentencias SQL
para crear el nuevo campo title en la tabla users:
-- modify "users" table
ALTER TABLE `users` ADD COLUMN `title` varchar(255) NULL;
¡Perfecto! Hemos utilizado con éxito la CLI de Atlas para generar automáticamente un nuevo archivo de migración para nuestro cambio.
Para aplicar la migración, podemos ejecutar el siguiente comando:
atlas migrate apply --dir file://ent/migrate/migrations --url mysql://root:pass@localhost:3306/db
Atlas informa:
Migrating to version 20221115101649 from 20221114165732 (1 migrations in total):
-- migrating version 20221115101649
-> ALTER TABLE `users` ADD COLUMN `title` varchar(255) NULL;
-- ok (36.152277ms)
-------------------------
-- 44.1116ms
-- 1 migrations
-- 1 sql statements
En la siguiente sección, veremos cómo planificar migraciones de esquema personalizadas para nuestro proyecto.