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

# SDK JavaScript: bancos de dados gerenciados

> Crie, inspecione, atualize, inicie, pare e exclua bancos de dados gerenciados, leia seu status e suas métricas e gerencie suas credenciais com api.databases.

`api.databases` gerencia os bancos de dados gerenciados da Square Cloud (MongoDB, MySQL, PostgreSQL e Redis). Todos os métodos, exceto `create` e `statusAll`, recebem o id do banco de dados primeiro. Para listar seus bancos de dados, use [`api.account.me()`](/pt-br/sdks/js/client#conta): seu array `databases` contém todos os bancos de dados que a chave pode ver.

A hospedagem de bancos de dados requer um plano Standard, Pro ou Enterprise.

Os exemplos usam o cliente `api` de [Criando o cliente](/pt-br/sdks/js/client#criando-o-cliente). `databaseId` é o id de um dos seus bancos de dados: [`api.account.me()`](/pt-br/sdks/js/client#conta) lista todos.

## Criando um banco de dados

```typescript theme={"system"}
const db = await api.databases.create({
    name: "my-db",
    type: "postgres", // "mongo" | "mysql" | "redis" | "postgres"
    version: "17",    // a full version or a prefix
    memory: 1024,     // MB, a whole number
});

console.log(db.id, db.connection_url, db.cluster);
console.log(db.password);    // shown only here: save it
console.log(db.certificate); // base64 PEM (private key, then certificate), or null
```

| Campo | Descrição |
| - | - |
| `name` | De 1 a 32 caracteres |
| `type` | `mongo`, `mysql`, `redis` ou `postgres` |
| `version` | Uma versão completa ou um prefixo como `"8"` |
| `memory` | MB, um número inteiro. Pelo menos 512 para Redis e 1024 para os demais |

O `password` e o `certificate` são retornados apenas por `create()` (e por [`resetCredentials()`](#credenciais)). A chamada espera pelo menos 120 s antes de expirar.

| Status | Código | Quando |
| - | - | - |
| 400 | `INVALID_NAME` | O nome não tem de 1 a 32 caracteres |
| 400 | `INVALID_DATABASE_TYPE`, `INVALID_DATABASE_VERSION` | Tipo desconhecido ou versão não suportada |
| 400 | `INVALID_MEMORY` | `memory` não é um número inteiro (uma fração ou uma string) |
| 400 | `INSUFFICIENT_MEMORY` | `memory` está abaixo do mínimo da engine ou excede a memória disponível |
| 400 | `CLUSTER_SELECTION_FAILED` | Nenhum cluster tinha capacidade suficiente |
| 400 / 500 | `DATABASE_CREATION_FAILED` | O provisionamento falhou |
| 403 | `UPGRADE_REQUIRED` | O plano não inclui hospedagem de bancos de dados |
| 503 | `CLUSTER_MAINTENANCE_TRY_LATER` | O provisionamento está pausado para manutenção |

## Obtendo um banco de dados

```typescript theme={"system"}
const db = await api.databases.get(databaseId);

console.log(db.id, db.name, db.type, db.ram, db.port, db.cluster, db.created_at);
```

## Atualizando um banco de dados

`update(databaseId, { name, ram })` renomeia ou redimensiona um banco de dados. Passe pelo menos um campo (caso contrário, 400 `NO_UPDATE_DATA`).

```typescript theme={"system"}
await api.databases.update(databaseId, { name: "orders", ram: 2048 });
```

## Iniciar e parar

```typescript theme={"system"}
await api.databases.start(databaseId);
await api.databases.stop(databaseId);
```

Assim como as chamadas de ciclo de vida das aplicações, elas esperam pelo menos 120 s, e uma recusa resulta em **409** com um código e uma mensagem vazia: `CONTAINER_ALREADY_STARTED`, `CONTAINER_ALREADY_STOPPED`, `CONTAINER_NOT_FOUND`, `CONTAINER_INSUFFICIENT_DISK_SPACE`, `CONTAINER_NETWORK_CONFLICT` ou `ACTION_FAILED`. Enquanto uma restauração de snapshot está em andamento, elas resultam em 403 `RESTORE_IN_PROGRESS`.

## Status e métricas

`status(databaseId)` retorna valores formatados; `{ raw: true }` retorna números. `statusAll()` retorna um resumo por banco de dados. `metrics(databaseId)` retorna as últimas 24 horas, um ponto a cada 5 minutos, do mais recente para o mais antigo.

```typescript theme={"system"}
const status = await api.databases.status(databaseId);
console.log(status.running, status.cpu, status.ram); // true "0.5%" "120.4MB"

const raw = await api.databases.status(databaseId, { raw: true });
console.log(raw.cpu, raw.ram); // 0.5 120.4

for (const { id, running, cpu, ram } of await api.databases.statusAll()) {
    console.log(id, running, cpu, ram); // cpu and ram only while running
}

const [latest] = await api.databases.metrics(databaseId);
console.log(latest.date, latest.cpu, latest.ram);
```

Os campos de status são os mesmos do [status de aplicações](/pt-br/sdks/js/managing_application#status).

## Credenciais

`certificate(databaseId)` retorna o certificado TLS como PEM codificado em base64. `resetCredentials(databaseId, type)` rotaciona a senha (e retorna a nova) ou o certificado (e retorna `""`). O banco de dados precisa estar em execução (400 `DATABASE_NOT_RUNNING`).

```typescript theme={"system"}
const certificate = await api.databases.certificate(databaseId);
const pem = atob(certificate);

const password = await api.databases.resetCredentials(databaseId, "password");
await api.databases.resetCredentials(databaseId, "certificate"); // ""
```

## Excluindo um banco de dados

```typescript theme={"system"}
await api.databases.delete(databaseId);
```

<Warning>
  A exclusão é permanente. Crie um [snapshot](/pt-br/sdks/js/snapshots) antes, caso você possa precisar dos dados novamente.
</Warning>

## Snapshots

`api.databases.snapshots` tem os mesmos `list`, `create` e `restore` das aplicações. Veja [Snapshots](/pt-br/sdks/js/snapshots).

## Próximos passos

<CardGroup cols={3}>
  <Card title="Workspaces" icon="users" href="/pt-br/sdks/js/workspaces">
    Compartilhe aplicações com sua equipe.
  </Card>

  <Card title="Referência da API de bancos de dados" icon="code" href="/pt-br/api-reference/endpoint/databases/create">
    Os endpoints REST por trás destes métodos.
  </Card>

  <Card title="Bancos de dados pela CLI" icon="terminal" href="/pt-br/cli-reference/databases">
    As mesmas ações pelo terminal.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.