> ## 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 données

> Provisionnez, surveillez et gérez les bases de données Square Cloud, y compris la rotation des identifiants et les snapshots.

<Info>
  Les bases de données sont exposées par l'interface `Databases` embarquée dans `rest.Rest`. Elles sont disponibles sur les plans **Standard, Pro et Enterprise**.
</Info>

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

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

## Créer une base de données

`api.CreateDatabase(opts)` provisionne une nouvelle base de données à partir d'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
```

| Champ     | Type                       | Description                                                                                                                                    |
| --------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `Name`    | `string`                   | Nom d'affichage, 1 à 32 caractères                                                                                                             |
| `Memory`  | `int`                      | Mémoire allouée en Mo                                                                                                                          |
| `Type`    | `squarecloud.DatabaseType` | Moteur : `DatabaseTypeMongo`, `DatabaseTypeMySQL`, `DatabaseTypeRedis` ou `DatabaseTypePostgres` (slugs `mongo`, `mysql`, `redis`, `postgres`) |
| `Version` | `string`                   | Version du moteur                                                                                                                              |

<Warning>
  `Password` (et `Certificate`, le cas échéant) n'apparaissent **que dans la réponse de création** et ne peuvent pas être récupérés plus tard — conservez-les dès maintenant. `ConnectionURL` arrive prête à l'emploi avec le mot de passe intégré.
</Warning>

Un type non pris en charge échoue avec `INVALID_DATABASE_TYPE` ; une mémoire insuffisante pour le plan échoue avec `INSUFFICIENT_MEMORY` ; un échec durant le provisionnement échoue avec `DATABASE_CREATION_FAILED`.

## Lister vos bases de données

`api.GetDatabases()` liste toutes les bases de données que vous possédez sous forme de descripteurs compacts `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)
}
```

## Récupérer une seule base de données

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

## Cycle de vie

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

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

## Statut et métriques

Les endpoints de statut et de métriques des bases de données partagent les mêmes formes que ceux des applications (ce sont des alias de type) — consultez [Gestion des applications](/fr/sdks/go/managing_application#obtenir-le-statut-de-lapplication) pour le détail champ par champ.

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

raw, err := api.GetDatabaseStatusRaw("abc123def456abc123def456") // numeric values
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)")
```

### Statut résumé de chaque base de données

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

## Mettre à jour

`api.UpdateDatabase(dbID, opts)` modifie le nom d'affichage et/ou l'allocation de mémoire. Au moins un champ doit être fourni.

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

## Identifiants

`api.GetDatabaseCertificate(dbID)` renvoie le certificat TLS (PEM encodé 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)` effectue la rotation soit du mot de passe, soit du certificat, à l'aide des 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>
  Le nouveau mot de passe n'est renvoyé **que dans la réponse de réinitialisation du mot de passe** et affiché une seule fois — conservez-le immédiatement.
</Warning>

## Snapshots

Les snapshots de bases de données reflètent l'API de snapshots des applications — consultez [Snapshots](/fr/sdks/go/snapshots#snapshots-de-bases-de-donnees).

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

## Supprimer une base de données

<Warning>
  La suppression d'une base de données est irréversible. Assurez-vous d'avoir un [snapshot](/fr/sdks/go/snapshots) récent si vous pourriez avoir besoin de récupérer les données.
</Warning>

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