diff --git a/CLAUDE.md b/CLAUDE.md index d1b7792..9b47ad1 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -47,6 +47,24 @@ durante media hora. Regla: `kubectl -n n8n rollout restart deploy/n8n` y comprobar que el `startTime` del pod es POSTERIOR a la escritura, antes de dar por buena ninguna prueba. +## Leer `/data/n8n/database.sqlite` con `cp` enseña el pasado + +La BD va en **WAL**. Un `cp` del fichero principal deja fuera el `-wal`, así que +la copia no tiene los últimos commits y **no da ningún error**: enseña +tranquilamente valores viejos. El 2026-07-31 un barrido hecho así dijo que un +cambio recién escrito no estaba, media hora después de escribirlo. + +Para leer siempre en frío y completo: + +```python +src = sqlite3.connect("file:/data/n8n/database.sqlite?mode=ro", uri=True) +dst = sqlite3.connect(":memory:"); src.backup(dst) # o a un fichero +``` + +Vale igual para el `sqlite3` del host: apuntarlo al fichero directamente sí lee +el WAL, pero **cualquier copia previa con `cp`, no**. Es la misma razón por la +que las copias de seguridad usan `.backup` y no `cp`. + ## Antes de tocar una BD de un pod: desarmar ArgoCD Casi todo está bajo Applications con `automated{selfHeal,prune}`. Un