> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Bases de datos

> Provisiona, monitorea y gestiona bases de datos de Square Cloud, incluyendo la rotación de credenciales y snapshots.

<Info>
  Las bases de datos se exponen a través de la interfaz `Databases` embebida en `rest.Rest`. Están disponibles en los planes **Standard, Pro y Enterprise**.
</Info>

```go theme={null}
client := rest.NewClient(os.Getenv("SQUARECLOUD_API_KEY"))
defer client.Close()

api := rest.New(client)
```

## Creación de una base de datos

`api.CreateDatabase(opts)` provisiona una nueva base de datos a partir de un `squarecloud.DatabaseCreateOptions`.

```go theme={null}
created, err := api.CreateDatabase(squarecloud.DatabaseCreateOptions{
	Name:    "my-mongo",
	Memory:  1024,
	Type:    squarecloud.DatabaseTypeMongo,
	Version: "8",
})
if err != nil {
	panic(err)
}

fmt.Println(created.ID)
fmt.Println(created.ConnectionURL) // ready to use — password already embedded
fmt.Println(created.Password)      // shown once — store securely
fmt.Println(created.Certificate)   // shown once — only for engines that issue a TLS cert
```

| Campo     | Tipo                       | Descripción                                                                                                                                 |
| --------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `Name`    | `string`                   | Nombre visible, de 1 a 32 caracteres                                                                                                        |
| `Memory`  | `int`                      | Memoria asignada en MB                                                                                                                      |
| `Type`    | `squarecloud.DatabaseType` | Motor: `DatabaseTypeMongo`, `DatabaseTypeMySQL`, `DatabaseTypeRedis` o `DatabaseTypePostgres` (slugs `mongo`, `mysql`, `redis`, `postgres`) |
| `Version` | `string`                   | Versión del motor                                                                                                                           |

<Warning>
  `Password` (y `Certificate`, cuando aplica) aparecen **únicamente en la respuesta de creación** y no se pueden recuperar después: guárdalos ahora. `ConnectionURL` viene lista para usar con la contraseña ya incluida.
</Warning>

Un tipo no soportado falla con `INVALID_DATABASE_TYPE`; una memoria insuficiente para el plan falla con `INSUFFICIENT_MEMORY`; un fallo durante el aprovisionamiento falla con `DATABASE_CREATION_FAILED`.

## Listado de tus bases de datos

`api.GetDatabases()` lista todas las bases de datos que posees como descriptores compactos `squarecloud.UserDatabase`:

```go theme={null}
dbs, err := api.GetDatabases()
if err != nil {
	panic(err)
}

for _, db := range dbs {
	fmt.Printf("%s (%s)\n", db.Name, db.ID)
}
```

## Obtención de una única base de datos

```go theme={null}
db, err := api.GetDatabase("abc123def456abc123def456")
if err != nil {
	panic(err)
}

fmt.Println(db.ID, db.Name, db.Type, db.RAM, db.Cluster, db.CreatedAt)
```

## Ciclo de vida

```go theme={null}
err := api.StartDatabase("abc123def456abc123def456")
if err != nil {
	panic(err)
}

err = api.StopDatabase("abc123def456abc123def456")
```

## Estado y métricas

Los endpoints de estado y métricas de bases de datos comparten las mismas formas que los de aplicaciones (son alias de tipo) — consulta [Gestionar aplicaciones](/es/sdks/go/managing_application#obtencion-del-estado-de-la-aplicacion) para el desglose campo por campo.

```go theme={null}
status, err := api.GetDatabaseStatus("abc123def456abc123def456")
if err != nil {
	panic(err)
}
fmt.Println(status.Status, status.CPU, status.RAM) // strings formateados

raw, err := api.GetDatabaseStatusRaw("abc123def456abc123def456") // valores numéricos
if err != nil {
	panic(err)
}

metrics, err := api.GetDatabaseMetrics("abc123def456abc123def456")
if err != nil {
	panic(err)
}
fmt.Println(len(metrics), "metric points (up to 288 over 24h)")
```

### Resumen de estado de cada base de datos

```go theme={null}
list, err := api.GetDatabaseListStatus()
if err != nil {
	panic(err)
}

for _, summary := range list {
	fmt.Printf("%s → running=%v\n", summary.ID, summary.Running)
}
```

## Actualización

`api.UpdateDatabase(dbID, opts)` cambia el nombre visible y/o la asignación de memoria. Debe proporcionarse al menos un campo.

```go theme={null}
err := api.UpdateDatabase("abc123def456abc123def456", squarecloud.DatabaseUpdateOptions{
	Name: "primary-db",
	RAM:  1024,
})
if err != nil {
	panic(err)
}
```

## Credenciales

`api.GetDatabaseCertificate(dbID)` devuelve el certificado TLS (PEM codificado en base64):

```go theme={null}
cert, err := api.GetDatabaseCertificate("abc123def456abc123def456")
if err != nil {
	panic(err)
}
fmt.Println("certificate length:", len(cert))
```

`api.ResetDatabaseCredentials(dbID, reset)` rota la contraseña o el certificado, usando las constantes `squarecloud.DatabaseReset*`:

```go theme={null}
// Rotate the password — the new value is shown only once
result, err := api.ResetDatabaseCredentials("abc123def456abc123def456", squarecloud.DatabaseResetPassword)
if err != nil {
	panic(err)
}
fmt.Println("new password:", result.Password)

// Rotate the certificate — fetch the new one via GetDatabaseCertificate
_, err = api.ResetDatabaseCredentials("abc123def456abc123def456", squarecloud.DatabaseResetCertificate)
```

<Warning>
  La nueva contraseña se devuelve **únicamente en la respuesta del reseteo de contraseña** y se muestra una sola vez: guárdala de inmediato.
</Warning>

## Snapshots

Los snapshots de bases de datos reflejan la API de snapshots de las aplicaciones — consulta [Snapshots](/es/sdks/go/snapshots#snapshots-de-bases-de-datos).

```go theme={null}
snapshots, err := api.GetDatabaseSnapshots("abc123def456abc123def456")
if err != nil {
	panic(err)
}

created, err := api.CreateDatabaseSnapshot("abc123def456abc123def456")
if err != nil {
	panic(err)
}
fmt.Println("download URL:", created.URL)
```

## Eliminación de una base de datos

<Warning>
  Eliminar una base de datos es irreversible. Asegúrate de tener un [snapshot](/es/sdks/go/snapshots) reciente si es posible que necesites recuperar los datos.
</Warning>

```go theme={null}
err := api.DeleteDatabase("abc123def456abc123def456")
if err != nil {
	panic(err)
}
```
