Esquema de la base del catálogo
El catálogo de NGBackup es un esquema PostgreSQL abierto y documentado. Nada en él es propietario ni oculto: los administradores pueden conectarse con cualquier cliente PostgreSQL, construir reportes personalizados o integrar monitoreo de terceros (Grafana, Zabbix, Power BI, …) directamente contra las tablas descritas aquí. El esquema sigue el linaje Bacula, así que las consultas de reportes de Bacula y los dashboards de la comunidad funcionan sin cambios.
Para reportes usa solo acceso de solo lectura — el Director es dueño de todas las escrituras. Crea un rol PostgreSQL dedicado con privilegio SELECT para las herramientas de reportes.
Tablas principales
Sección titulada «Tablas principales»Una fila por ejecución de job — la columna vertebral de todo reporte.
| Columna | Significado |
|---|---|
JobId | Id numérico único de la ejecución. |
Name | Nombre del job. |
Type | Tipo de job (B backup, R restore, V verify, C copy, M migrate, D admin). |
Level | Nivel (F full, D differential, I incremental, …). |
ClientId | FK → Client. |
JobStatus | Estado de terminación/ejecución de un carácter (ver códigos de estado). |
SchedTime / StartTime / EndTime | Timestamps programado, de inicio real y de fin. |
JobFiles | Archivos procesados. |
JobBytes | Bytes procesados. |
JobErrors | Conteo de errores no fatales. |
Una fila por nodo protegido: ClientId, Name, Uname (cadena de SO/arquitectura reportada por el File daemon) y los períodos de retención de archivos/jobs del cliente.
Media (volúmenes)
Sección titulada «Media (volúmenes)»Una fila por volumen, físico o lógico.
| Columna | Significado |
|---|---|
VolumeName | Etiqueta del volumen. |
PoolId | FK → Pool. |
MediaType | Cadena de tipo de medio (coincide con las definiciones de Storage/Device — disco, nube, cinta). |
VolBytes | Bytes actualmente almacenados en el volumen. |
VolStatus | Full, Used, Append, Recycle, Error, … |
LastWritten | Timestamp de la última escritura. |
LocationId | FK → Location (ubicación física actual, para seguimiento de bóveda). |
Una fila por pool: PoolId, Name, PoolType, retención (VolRetention), banderas de reciclaje (Recycle, AutoPrune), límites (MaxVols, MaxVolBytes) y el LabelFormat de los volúmenes.
File / Path / Filename (índice de archivos)
Sección titulada «File / Path / Filename (índice de archivos)»El índice por archivo detrás de los restores y de los reportes a nivel de archivo. File guarda una fila por archivo por job (FileId, FileIndex, JobId, PathId, atributos codificados en LStat, digest MD5/checksum); Path deduplica rutas de directorio (PathId, Path). En los esquemas actuales el nombre del archivo va en la propia fila de File (columna Filename); los catálogos más antiguos del linaje Bacula mantienen una tabla Filename separada — las consultas contra cualquiera de las dos formas están documentadas.
JobMedia
Sección titulada «JobMedia»El mapeo job↔volumen: qué volúmenes escribió cada job y dónde (JobId, MediaId, FirstIndex/LastIndex, direcciones de bloque). Haz join para responder “¿qué jobs están en esta cinta?” o “¿qué volúmenes necesita el restore de este job?”.
Las líneas completas del log de job (LogId, JobId, Time, LogText) — el mismo texto que imprime list joblog jobid=N, consultable para reportes de patrones de error.
Location & LocationLog
Sección titulada «Location & LocationLog»Seguimiento de bóveda (vault). Location define lugares físicos con nombre (LocationId, Location, Cost, Enabled); LocationLog registra cada movimiento de un volumen entre ubicaciones, con timestamp, estado y el id del medio — una pista de auditoría de la rotación off-site.
Códigos de estado
Sección titulada «Códigos de estado»Una tabla de referencia que mapea cada código JobStatus de un carácter a su significado legible, para que los reportes hagan join contra ella en lugar de codificar la leyenda. Los códigos más comunes:
| Código | Significado |
|---|---|
T | Terminó normalmente (OK). |
W | Terminó con advertencias. |
E | Terminó con error. |
f | Error fatal. |
A | Cancelado por el usuario. |
R | En ejecución. |
C | Creado, aún no en ejecución. |
Ejemplo: tasa de éxito por cliente, últimos 30 días
Sección titulada «Ejemplo: tasa de éxito por cliente, últimos 30 días»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;Acceso de consulta
Sección titulada «Acceso de consulta»Tres vías de lectura; las dos primeras no requieren credenciales directas de la base:
- Verbo
.sqldel console —* .sql query="SELECT ..."ejecuta una consulta de solo lectura a través del Director e imprime las filas; útil para verificaciones ad-hoc desdebackup-console. - API REST — los endpoints de jobs, medios y estadísticas exponen los mismos datos del catálogo como JSON; consulta la referencia de la API REST.
- PostgreSQL directo — un rol de solo lectura apuntado a la base del catálogo, para herramientas de BI y monitoreo.
Los reportes integrados y programados sobre este esquema se cubren en Reportes & analytics.