Schema do banco do catálogo
O catálogo do NGBackup é um schema PostgreSQL aberto e documentado. Nada nele é proprietário ou oculto: administradores podem conectar com qualquer cliente PostgreSQL, construir relatórios customizados ou integrar monitoramento de terceiros (Grafana, Zabbix, Power BI, …) diretamente contra as tabelas descritas aqui. O schema segue a linhagem Bacula, então consultas de relatório do Bacula e dashboards da comunidade funcionam sem alteração.
Para relatórios, use apenas acesso somente-leitura — o Director é dono de todas as escritas. Crie uma role PostgreSQL dedicada com privilégio SELECT para as ferramentas de relatório.
Tabelas principais
Seção intitulada “Tabelas principais”Uma linha por execução de job — a espinha dorsal de todo relatório.
| Coluna | Significado |
|---|---|
JobId | Id numérico único da execução. |
Name | Nome do job. |
Type | Tipo do job (B backup, R restore, V verify, C copy, M migrate, D admin). |
Level | Nível (F full, D differential, I incremental, …). |
ClientId | FK → Client. |
JobStatus | Status de término/execução em um caractere (veja códigos de status). |
SchedTime / StartTime / EndTime | Timestamps agendado, de início real e de fim. |
JobFiles | Arquivos processados. |
JobBytes | Bytes processados. |
JobErrors | Contagem de erros não-fatais. |
Uma linha por nó protegido: ClientId, Name, Uname (string de SO/arquitetura reportada pelo File daemon) e os períodos de retenção de arquivos/jobs do cliente.
Media (volumes)
Seção intitulada “Media (volumes)”Uma linha por volume, físico ou lógico.
| Coluna | Significado |
|---|---|
VolumeName | Rótulo do volume. |
PoolId | FK → Pool. |
MediaType | String de tipo de mídia (casa com as definições de Storage/Device — disco, nuvem, fita). |
VolBytes | Bytes atualmente armazenados no volume. |
VolStatus | Full, Used, Append, Recycle, Error, … |
LastWritten | Timestamp da última gravação. |
LocationId | FK → Location (localização física atual, para rastreio de cofre). |
Uma linha por pool: PoolId, Name, PoolType, retenção (VolRetention), flags de reciclagem (Recycle, AutoPrune), limites (MaxVols, MaxVolBytes) e o LabelFormat dos volumes.
File / Path / Filename (índice de arquivos)
Seção intitulada “File / Path / Filename (índice de arquivos)”O índice por arquivo por trás dos restores e dos relatórios em nível de arquivo. File guarda uma linha por arquivo por job (FileId, FileIndex, JobId, PathId, atributos codificados em LStat, digest MD5/checksum); Path desduplica caminhos de diretório (PathId, Path). Nos schemas atuais o nome do arquivo vai na própria linha de File (coluna Filename); catálogos mais antigos da linhagem Bacula mantêm uma tabela Filename separada — consultas contra qualquer dos dois formatos estão documentadas.
JobMedia
Seção intitulada “JobMedia”O mapeamento job↔volume: quais volumes cada job gravou e onde (JobId, MediaId, FirstIndex/LastIndex, endereços de bloco). Faça join para responder “quais jobs estão nesta fita?” ou “de quais volumes o restore deste job precisa?”.
As linhas completas do log de job (LogId, JobId, Time, LogText) — o mesmo texto que list joblog jobid=N imprime, consultável para relatórios de padrões de erro.
Location & LocationLog
Seção intitulada “Location & LocationLog”Rastreio de cofre (vault). Location define lugares físicos nomeados (LocationId, Location, Cost, Enabled); LocationLog registra cada movimento de um volume entre localizações, com timestamp, status e o id da mídia — uma trilha de auditoria da rotação off-site.
Códigos de status
Seção intitulada “Códigos de status”Uma tabela de referência que mapeia cada código JobStatus de um caractere para seu significado legível, para que relatórios façam join nela em vez de codificar a legenda. Os códigos mais comuns:
| Código | Significado |
|---|---|
T | Terminou normalmente (OK). |
W | Terminou com avisos. |
E | Terminou com erro. |
f | Erro fatal. |
A | Cancelado pelo usuário. |
R | Em execução. |
C | Criado, ainda não em execução. |
Exemplo: taxa de sucesso por cliente, últimos 30 dias
Seção intitulada “Exemplo: taxa de sucesso por cliente, últimos 30 dias”SELECT c.Name AS client, COUNT(*) AS jobs, COUNT(*) FILTER (WHERE j.JobStatus = 'T') AS ok, ROUND(100.0 * COUNT(*) FILTER (WHERE j.JobStatus = 'T') / COUNT(*), 1) AS success_pctFROM Job jJOIN Client c ON c.ClientId = j.ClientIdWHERE j.Type = 'B' AND j.SchedTime >= NOW() - INTERVAL '30 days'GROUP BY c.NameORDER BY success_pct ASC;Acesso de consulta
Seção intitulada “Acesso de consulta”Três caminhos de leitura; os dois primeiros não exigem credenciais diretas do banco:
- Verbo
.sqldo console —* .sql query="SELECT ..."roda uma consulta somente-leitura via Director e imprime as linhas; útil para verificações ad-hoc nobackup-console. - API REST — endpoints de jobs, mídias e estatísticas expõem os mesmos dados do catálogo como JSON; veja a referência da API REST.
- PostgreSQL direto — uma role somente-leitura apontada para o banco do catálogo, para ferramentas de BI e monitoramento.
Os relatórios embutidos e agendados sobre este schema estão em Relatórios & analytics.