---
title: "Base de datos"
description: "La base de datos de metadatos (meta) guarda lo que no se puede derivar de los archivos: SQLite por defecto, Postgres vía META_DB_URL para un equipo."
---

# Base de datos

En Notarium, las notas son archivos, y el índice de búsqueda y el grafo se reconstruyen a partir de ellos. Pero una parte del estado **no se puede derivar** de los archivos: la conserva una base de datos de metadatos (meta) aparte. Por defecto es un archivo SQLite bajo la raíz de datos — `<DATA_DIR>/meta.db`; la variable `META_DB_URL` solo hace falta para apuntar a un Postgres externo.

## Qué guarda la base de datos de metadatos

| Datos | Por qué no viene de los archivos |
|---|---|
| Identificadores de notas | El registro `notarium-id` ↔ ruta: sobrevive a movimientos y renombrados. |
| Historial de versiones | El registro de revisiones (instantáneas de versiones, de dónde salió cada edición) lo lleva la propia aplicación, no git. |
| Usuarios y accesos | Cuentas, roles, membresía, tokens. |
| Historial de renombrados | Alias de los slugs antiguos de espacios y proyectos — para que las direcciones anteriores sigan resolviéndose. |

Nada de esto se puede reconstruir solo a partir de los archivos `.md` — por eso la base de datos de metadatos siempre debe incluirse en tu [copia de seguridad](/docs/self-hosting/backup/). En esta base de datos también hay un registro de espacios, pero es derivado: la identidad de un espacio vive en un archivo marcador en su raíz y se recupera con un escaneo ([File-first](/docs/concepts/file-first/)). Los índices derivados del motor (`<DATA_DIR>/engine`), si se pierden, simplemente se reconstruyen a partir de los archivos en el siguiente arranque.

Para saber más sobre las versiones y de dónde vienen, consulta [Conceptos: versionado](/docs/concepts/versioning/).

## Esquema y migraciones

El esquema de la base de datos de metadatos es propiedad de la aplicación: las migraciones se aplican **al arrancar** y no hay ningún comando aparte para ellas. Dentro de la base de datos vive un registro de las migraciones ya aplicadas — así es como una compilación sabe con qué está tratando.

El arranque admite exactamente tres estados:

- **una base de datos vacía** — se crea el esquema base y la entrada del registro se escribe en la misma transacción;
- **una base de datos cuyo registro es un prefijo exacto del esperado** — se comprueban versiones, nombres y sumas de verificación, y luego se aplican las migraciones que faltan;
- **una base de datos no vacía y sin registro** — el arranque **falla en modo fail-closed**, antes de cualquier cambio de esquema o consulta de la aplicación.

Esto último es deliberado. Una compilación no adivina la versión de una base de datos que no reconoce, ni sella el registro por su cuenta: eso corrompería los datos en silencio. Si lo que tienes entre manos es una base así (por ejemplo, una instancia anterior al esquema base), actualízala y compruébala primero con el procedimiento estándar de su propia versión, y solo después hazla cruzar esta frontera.

> [!important] Revertir es restaurar desde una copia de seguridad
> El mecanismo de reversión de datos en Notarium es un archivo de copia de seguridad verificado, no migraciones SQL inversas. Haz una copia de seguridad y verifícala **antes** de actualizar: [Copia de seguridad y restauración](/docs/self-hosting/backup/).

## SQLite (por defecto)

Sin configuración: por defecto la base de datos de metadatos es `sqlite:<DATA_DIR>/meta.db`, es decir, un archivo en el volumen `/data`. No hace falta ningún servicio aparte, ni hay nada que configurar. Esto basta para una instancia personal y un equipo pequeño en un **único** contenedor.

## Postgres (para un equipo y estado compartido)

Para sacar el estado fuera del contenedor — para almacenamiento compartido, tolerancia a fallos o mantenimiento — apunta a Postgres:

```bash
# .env
META_DB_URL=postgres://user:pass@db:5432/notarium
```

Necesitas Postgres cuando el estado debe vivir de forma independiente del ciclo de vida del contenedor. Las notas en sí siguen siendo archivos bajo `<DATA_DIR>/spaces` — solo lo que no se puede derivar de ellas va a la base de datos.

> [!important] El modo `password` depende de la base de datos de metadatos
> En el modo `AUTH_MODE=password`, la base de datos de metadatos hace falta para las cuentas y los tokens — y ya está ahí por defecto (SQLite bajo la raíz de datos). No necesitas definir `META_DB_URL` por separado; solo la especificas para pasar a Postgres. Únicamente `AUTH_MODE=none` funciona sin base de datos de metadatos. Consulta [Autenticación](/docs/self-hosting/authentication/).

> [!note] Instancia única
> Sacar el estado a Postgres no habilita por sí solo el escalado horizontal: Notarium se ejecuta como una única instancia, y no se admiten varias instancias detrás de un balanceador de carga (consulta [Producción](/docs/self-hosting/production/)).
