> ## 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.

# Bancos de dados

> Provisione, monitore e gerencie bancos de dados da Square Cloud, incluindo rotação de credenciais e snapshots.

<Info>
  Bancos de dados são expostos pela interface `Databases` embutida em `rest.Rest`. Disponível nos planos **Standard, Pro e Enterprise**.
</Info>

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

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

## Criando um banco

`api.CreateDatabase(opts)` provisiona um novo banco a partir de um `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) // pronta para uso — senha já embutida
fmt.Println(created.Password)      // exibida uma única vez — guarde com segurança
fmt.Println(created.Certificate)   // exibido uma única vez — apenas em engines que emitem certificado TLS
```

| Campo     | Tipo                       | Descrição                                                                                                                                     |
| --------- | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `Name`    | `string`                   | Nome de exibição, de 1 a 32 caracteres                                                                                                        |
| `Memory`  | `int`                      | Memória alocada em MB                                                                                                                         |
| `Type`    | `squarecloud.DatabaseType` | Engine: `DatabaseTypeMongo`, `DatabaseTypeMySQL`, `DatabaseTypeRedis` ou `DatabaseTypePostgres` (slugs `mongo`, `mysql`, `redis`, `postgres`) |
| `Version` | `string`                   | Versão do engine                                                                                                                              |

<Warning>
  `Password` (e `Certificate`, quando aplicável) aparecem **apenas na resposta de criação** e não podem ser recuperados depois — guarde-os agora. `ConnectionURL` vem pronta para uso com a senha embutida.
</Warning>

Um tipo não suportado falha com `INVALID_DATABASE_TYPE`; memória insuficiente para o plano falha com `INSUFFICIENT_MEMORY`; uma falha durante o provisionamento falha com `DATABASE_CREATION_FAILED`.

## Listando seus bancos

`api.GetDatabases()` lista todos os bancos que você possui como descritores 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)
}
```

## Buscando um banco específico

```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")
```

## Status e métricas

Os endpoints de status e métricas de banco de dados compartilham os mesmos formatos dos de aplicação (são type aliases) — veja [Gerenciando aplicações](/pt-br/sdks/go/managing_application#obtendo-o-status-da-aplicacao) para o detalhamento campo a campo.

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

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), "pontos de métrica (até 288 em 24h)")
```

### Status resumido de todos os bancos

```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)
}
```

## Atualizando

`api.UpdateDatabase(dbID, opts)` altera o nome de exibição e/ou a memória alocada. Pelo menos um campo deve ser fornecido.

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

## Credenciais

`api.GetDatabaseCertificate(dbID)` retorna o certificado TLS (PEM codificado em base64):

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

`api.ResetDatabaseCredentials(dbID, reset)` rotaciona a senha ou o certificado, usando as constantes `squarecloud.DatabaseReset*`:

```go theme={null}
// Rotaciona a senha — o novo valor é exibido apenas uma vez
result, err := api.ResetDatabaseCredentials("abc123def456abc123def456", squarecloud.DatabaseResetPassword)
if err != nil {
	panic(err)
}
fmt.Println("nova senha:", result.Password)

// Rotaciona o certificado — busque o novo via GetDatabaseCertificate
_, err = api.ResetDatabaseCredentials("abc123def456abc123def456", squarecloud.DatabaseResetCertificate)
```

<Warning>
  A nova senha é retornada **apenas na resposta do reset de senha** e exibida uma única vez — guarde-a imediatamente.
</Warning>

## Snapshots

Snapshots de banco de dados espelham a API de snapshots de aplicações — veja [Snapshots](/pt-br/sdks/go/snapshots#snapshots-de-banco-de-dados).

```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("URL de download:", created.URL)
```

## Excluindo um banco

<Warning>
  Excluir um banco é irreversível. Garanta um [snapshot](/pt-br/sdks/go/snapshots) recente caso precise recuperar os dados.
</Warning>

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