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

# Databases

> Square Cloud のデータベースをプロビジョニング、監視、管理します。認証情報のローテーションや snapshot も含みます。

<Info>
  データベースは、`rest.Rest` に埋め込まれた `Databases` インターフェースによって公開されます。**Standard、Pro、Enterprise** プランで利用できます。
</Info>

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

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

## データベースの作成

`api.CreateDatabase(opts)` は、`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) // そのまま使える — パスワードは埋め込み済み
fmt.Println(created.Password)      // 一度だけ表示される — 安全に保存すること
fmt.Println(created.Certificate)   // 一度だけ表示される — TLS証明書を発行するエンジンにのみ存在
```

| Field     | Type                       | Description                                                                                                                            |
| --------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `Name`    | `string`                   | 表示名、1–32 文字                                                                                                                            |
| `Memory`  | `int`                      | 割り当てるメモリ (MB)                                                                                                                          |
| `Type`    | `squarecloud.DatabaseType` | エンジン: `DatabaseTypeMongo`、`DatabaseTypeMySQL`、`DatabaseTypeRedis` または `DatabaseTypePostgres`（スラッグは `mongo`、`mysql`、`redis`、`postgres`） |
| `Version` | `string`                   | エンジンバージョン                                                                                                                              |

<Warning>
  `Password`（および該当する場合は `Certificate`）は **作成時のレスポンスにのみ** 含まれ、後から復元することはできません — 今すぐ保存してください。`ConnectionURL` はパスワード埋め込み済みで、そのまま使えます。
</Warning>

サポートされていないタイプは `INVALID_DATABASE_TYPE` で失敗します。プランに対してメモリが少なすぎる場合は `INSUFFICIENT_MEMORY` で失敗します。プロビジョニング中の失敗は `DATABASE_CREATION_FAILED` で失敗します。

## データベースの一覧取得

`api.GetDatabases()` は、所有するすべてのデータベースをコンパクトな `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)
}
```

## 単一のデータベースの取得

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

## ライフサイクル

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

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

## ステータスとメトリクス

データベースのステータスとメトリクスのエンドポイントは、アプリケーションのものと同じ形を共有しています（型エイリアスです）— フィールドごとの詳細は [アプリケーションの管理](/ja/sdks/go/managing_application#アプリケーションステータスの取得) を参照してください。

```go theme={null}
status, err := api.GetDatabaseStatus("abc123def456abc123def456")
if err != nil {
	panic(err)
}
fmt.Println(status.Status, status.CPU, status.RAM) // フォーマット済み文字列

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

### すべてのデータベースの概要ステータス

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

## 更新

`api.UpdateDatabase(dbID, opts)` は、表示名やメモリ割り当てを変更します。少なくとも 1 つのフィールドを指定する必要があります。

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

## 認証情報

`api.GetDatabaseCertificate(dbID)` は TLS 証明書（base64 エンコードされた PEM）を返します:

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

`api.ResetDatabaseCredentials(dbID, reset)` は、`squarecloud.DatabaseReset*` 定数を使って、パスワードまたは証明書のいずれかをローテーションします:

```go theme={null}
// パスワードをローテーションする — 新しい値は一度だけ表示される
result, err := api.ResetDatabaseCredentials("abc123def456abc123def456", squarecloud.DatabaseResetPassword)
if err != nil {
	panic(err)
}
fmt.Println("new password:", result.Password)

// 証明書をローテーションする — 新しいものは GetDatabaseCertificate で取得する
_, err = api.ResetDatabaseCredentials("abc123def456abc123def456", squarecloud.DatabaseResetCertificate)
```

<Warning>
  新しいパスワードは **パスワードリセットのレスポンスでのみ** 返され、一度しか表示されません — すぐに保存してください。
</Warning>

## Snapshots

データベースの snapshot は、アプリケーションの snapshot API をミラーリングします — [Snapshots](/ja/sdks/go/snapshots) を参照してください。

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

## データベースの削除

<Warning>
  データベースの削除は取り消せません。データを復元する必要があるかもしれない場合は、最新の [snapshot](/ja/sdks/go/snapshots) があることを確認してください。
</Warning>

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