Saltar al contenido principal

Migración Multi-esquema

[Traducción Beta No Oficial]

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

Usando el motor de migración de Atlas, un esquema Ent puede definirse y gestionarse en múltiples esquemas de base de datos. Esta guía muestra cómo lograrlo en tres sencillos pasos:

La funcionalidad de migración multi-esquema está completamente implementada en la CLI de Atlas y requiere iniciar sesión para usarla:

atlas login

Instalar Atlas

[Traducción Beta No Oficial]

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

Para instalar la última versión de Atlas, simplemente ejecuta uno de los siguientes comandos en tu terminal, o visita el sitio web de Atlas:

curl -sSf https://atlasgo.sh | sh

Iniciar sesión en Atlas

$ atlas login a8m
You are now connected to "a8m" on Atlas Cloud.

Anotar tus esquemas Ent

El paquete entsql permite anotar un esquema Ent con un nombre de esquema de base de datos. Por ejemplo:

// Annotations of the User.
func (User) Annotations() []schema.Annotation {
return []schema.Annotation{
entsql.Schema("db3"),
}
}

Para compartir la misma configuración de esquema entre múltiples esquemas Ent, puedes usar ent.Mixin o definir e incrustar un esquema base:

mixin.go
// Mixin holds the default configuration for most schemas in this package.
type Mixin struct {
mixin.Schema
}

// Annotations of the Mixin.
func (Mixin) Annotations() []schema.Annotation {
return []schema.Annotation{
entsql.Schema("db1"),
}
}
user.go
// User holds the edge schema definition of the User entity.
type User struct {
ent.Schema
}

// Mixin defines the schemas that mixed into this schema.
func (User) Mixin() []ent.Mixin {
return []ent.Mixin{
Mixin{},
}
}

Generar migraciones

Para generar una migración, usa el comando atlas migrate diff. Por ejemplo:

atlas migrate diff \
--to "ent://ent/schema" \
--dev-url "docker://mysql/8"
nota

Por defecto, el comando migrate diff genera una lista de sentencias SQL sin indentación. Si prefieres generar las sentencias SQL con indentación, usa el flag --format. Por ejemplo:

atlas migrate diff \
--to "ent://ent/schema" \
--dev-url "docker://postgres/15/dev" \
--format "{{ sql . \" \" }}"

Control del cliente Ent

Cuando se activa la bandera de característica sql/schemaconfig, Ent utiliza automáticamente los nombres de esquema definidos en tu ent/schema como configuración predeterminada en tiempo de ejecución. Esto significa que cualquier anotación entsql.Schema("db_name") se aplica por defecto, y puedes sobrescribirla opcionalmente en tiempo de ejecución si es necesario.

Para activar esta característica en tu proyecto, usa el flag --feature:

--feature sql/schemaconfig

Una vez activada, también puedes sobrescribir la configuración del esquema en tiempo de ejecución usando la opción ent.AlternateSchema:

c, err := ent.Open(dialect, conn, ent.AlternateSchema(ent.SchemaConfig{
User: "usersdb",
Car: "carsdb",
}))
c.User.Query().All(ctx) // SELECT * FROM `usersdb`.`users`
c.Car.Query().All(ctx) // SELECT * FROM `carsdb`.`cars`