restoredb/README.md
2026-06-22 18:57:30 -03:00

163 lines
3.5 KiB
Markdown

# rsdb
Assistente CLI/TUI em Rust para listar dumps em MinIO/S3, baixar arquivos para uma pasta local e restaurar um banco PostgreSQL com `DROP DATABASE` e recriação controlados por confirmação explícita.
## Requisitos
- Rust stable
- Ferramentas PostgreSQL no `PATH`:
- `psql`
- `pg_restore`
- Acesso ao bucket MinIO/S3 com API compatível com S3
## Instalação
```bash
cargo build --release
```
O binário ficará em:
```bash
target/release/rsdb
```
## Configuração
Na primeira execução, se nenhuma configuração completa existir, o programa pergunta os campos um a um, no estilo do `rclone`, e salva em `config.yml` na mesma pasta do executável.
Senhas são perguntadas sem eco no terminal. O programa também continua aceitando `.env` e `config.toml` na raiz do projeto.
Também é possível distribuir esse `config.yml` junto do binário. Ele é usado como fallback para completar valores ausentes.
A ordem de precedência é:
1. Variáveis de ambiente / `.env`
2. `config.toml` local
3. `config.yml` na mesma pasta do executável
Exemplo `.env`:
```bash
cp .env.example .env
```
Exemplo `config.toml`:
```bash
cp config.example.toml config.toml
```
Exemplo `config.yml`:
```bash
cp config.example.yml "$(dirname "$(realpath target/release/rsdb)")/config.yml"
```
Variáveis obrigatórias:
- `MINIO_ENDPOINT`
- `MINIO_ACCESS_KEY`
- `MINIO_SECRET_KEY`
- `MINIO_BUCKET`
- `POSTGRES_HOST`
- `POSTGRES_PORT`
- `POSTGRES_USER`
- `POSTGRES_PASSWORD`
- `POSTGRES_DATABASE`
Opcionais:
- `MINIO_REGION`, padrão `us-east-1`
- `POSTGRES_SSLMODE`, padrão `prefer`
- `DUMPS_DIR`, padrão `./dumps`
Senhas nunca são exibidas. A senha do PostgreSQL é passada para `psql` e `pg_restore` por `PGPASSWORD`.
## Uso
Abrir a TUI:
```bash
rsdb
```
Listar dumps remotos e locais:
```bash
rsdb list
```
Restaurar diretamente um dump local ou remoto, ainda com confirmação:
```bash
rsdb restore backup.sql.gz
```
Simular uma restauração sem baixar, apagar ou restaurar:
```bash
rsdb restore backup.sql.gz --dry-run
```
Validar configuração, pasta local, conexão S3 e ferramentas PostgreSQL:
```bash
rsdb doctor
```
`rsdb config-check` continua disponível como comando compatível.
Mostrar a configuração carregada, com senhas mascaradas:
```bash
rsdb config show
```
Apagar dumps locais, após confirmação:
```bash
rsdb clean
```
Apagar apenas dumps locais mais antigos que 30 dias:
```bash
rsdb clean --older-than-days 30
```
## Controles da TUI
- `↑`/`↓` ou `k`/`j`: navegar
- `/`: filtrar por nome
- `Esc`: limpar filtro ou cancelar confirmação
- `r`: atualizar listas
- `d`: apagar o arquivo local do dump selecionado, após confirmação
- `Enter`: selecionar/restaurar
- `q`: sair
Antes da restauração, a TUI mostra o host, banco de destino e dump selecionado, com aviso de que o banco será apagado. A restauração só ocorre após confirmação.
## Formatos suportados
- `.sql`: restaurado com `psql`
- `.sql.gz`, `.sql.zst`: descompactados e restaurados com `psql`
- `.dump`, `.backup`, `.bin`, `.binary`, `.tar`: restaurados com `pg_restore`
- `.dump.gz`, `.dump.zst`, `.backup.gz`, `.backup.zst`, `.bin.gz`, `.bin.zst`, `.binary.gz`, `.binary.zst`, `.tar.gz`, `.tar.zst`: descompactados para arquivo temporário e restaurados com `pg_restore`
## Logs
Logs técnicos são gravados em:
```bash
rsdb.log
```
O histórico de restaurações é salvo em:
```bash
<DUMPS_DIR>/history.yml
```
Erros exibidos na TUI ou CLI são resumidos para o usuário; detalhes técnicos ficam no log.