El cliente de aplicación de código abierto para bases de datos de esquema. Ejecútelo junto a su propio PostgreSQL, empareje una vez, y mantendrá esa base de datos convergente con sus enriquecimientos: arrancando desde una instantánea y luego aplicando un feed delta en vivo a través de un único WebSocket saliente. Su cadena de conexión nunca sale de su máquina.
Cada instrucción está protegida por revisión, de modo que un lote reentregado converge a las mismas filas. Un error de SQL revierte el lote y se detiene: un delta corrupto nunca se omite de forma silenciosa.
El cliente extrae estado, no operaciones: cada delta transporta la(s) fila(s) actual(es) completa(s) de una entidad modificada como un INSERT … ON CONFLICT … DO UPDATE idempotente, de modo que el destino converge incluso si se omitió un lote.
Las bases de datos de esquema se pueden consumir de varias formas: n8n, Make.com, MCP, webhooks sin procesar o el feed delta REST. El cliente de sincronización es la vía totalmente automatizada: lo que menos hay que construir y lo que menos se filtra.
Sin escenario de n8n, sin cron, sin código de pegamento. Empareje una vez y arranca desde el snapshot; luego aplica cada delta a medida que llega.
La cadena de conexión se pasa por la línea de comandos o se almacena localmente con modo 600: nunca se envía a Entity Enricher. El cliente solo se conecta hacia el exterior.
Cada delta es un upsert idempotente y protegido por revisión. Si el cliente falla a mitad de un lote, el lote se vuelve a entregar cuando expira su lease y volver a aplicarlo converge a las mismas filas.
Un error de SQL revierte el lote, informa del delta fallido en la página Bases de datos y sale con código distinto de cero: un delta corrupto nunca puede omitirse en silencio.
Primero registre una base de datos en un esquema, luego empareje un cliente y ejecútelo junto a su base de datos.
En la página Bases de datos, registre una base de datos en el esquema que desea reflejar y revise sus claves de base de datos. Consulte Bases de datos para ver el modelo completo. Este paso declara el dialecto de destino que aplicará el cliente.
Descargue un binario firmado desde Versiones, o compile desde el código fuente (Go ≥ 1.23).
go build -o ee-database .
El código fuente y las versiones firmadas están en TOT-Concept/ee-database (MIT).
Ejecute ee-database pair. Se abre una pestaña del navegador en /database/connect con un código corto: confírmelo y elija qué base de datos debe sincronizar este cliente.
ee-database pair --server https://entityenricher.ai Open this URL in your browser to confirm pairing: https://entityenricher.ai/database/connect?code=7QX-KP2 Code: 7QX-KP2 Waiting for confirmation...
¿Prefiere un token? Emita uno en la página Bases de datos (Sync client → Pair a client) y páselo directamente: ee-database pair --server … <refresh-token>.
En la primera ejecución, el cliente obtiene el snapshot .sql y lo aplica; luego se conecta y transmite los deltas. --save-dsn almacena la cadena de conexión localmente para que las ejecuciones posteriores no necesiten argumentos.
ee-database run --dsn "postgres://user:pass@localhost:5432/mydb" --save-dsn
«Junto a» significa adyacente en la red, no en el servidor de base de datos: cualquier máquina o contenedor que pueda alcanzar el DSN funciona — incluido PostgreSQL gestionado en la nube (Azure, OVHcloud, AWS RDS…), que normalmente exige TLS: …/mydb?sslmode=require.
Los deltas salen de Entity Enricher a través de una estricta bandeja de salida FIFO por base de datos. El servidor concede la ventana visible durante 120 segundos y la envía como un único lote; el cliente aplica todo el lote en una sola transacción y responde ack , lo que hace avanzar el cursor y activa la siguiente ventana de inmediato. Un cliente que falla a mitad de un lote queda cubierto por la expiración de la concesión y un reenvío por parte del servidor: nada se pierde ni se confirma dos veces.
El arranque inicial y el estado estable comparten la misma ruta de código. Omita el arranque inicial con --skip-bootstrap si su base de datos ya está inicializada.
Cada sentencia lleva un _sync_revision para que una fila más antigua nunca sobrescriba a una más reciente, incluso fuera de orden.
Un error de SQL almacena el id del delta fallido en la página Bases de datos → tarjeta del cliente de sincronización, y el proceso sale con código distinto de cero para que su supervisor lo reinicie.
El dialecto de destino queda fijado por el registro de la base de datos de esquema en Entity Enricher: el cliente aplica el SQL que el servidor genere. PostgreSQL es el dialecto de lanzamiento; los controladores de MySQL y SQLite ya vienen incluidos para cuando lleguen sus generadores de SQL. La aplicación de varias sentencias se gestiona por controlador (protocolo simple de pgx, multiStatements de MySQL y SQLite sin CGO).
El cliente inicia el WebSocket a través de :443/wss. El host de su base de datos nunca acepta conexiones entrantes: sin puertos que abrir ni ingress que configurar.
Una credencial está vinculada a una única base de datos de esquema. Emparejar de nuevo la rota y expulsa instantáneamente la conexión activa anterior.
El token de actualización de 365 días (almacenado con modo 600) se intercambia por tokens de acceso de 15 minutos que autentican el WebSocket. Revocarlo en la interfaz desconecta un cliente activo en ~1 segundo.
Ejecute el cliente con un rol de base de datos dedicado y limitado al esquema sincronizado, de modo que un token comprometido no pueda tocar nada más.
| Comando | Qué hace |
|---|---|
| ee-database pair --server URL | Emparejamiento por código de dispositivo confirmado en el navegador. Elija qué base de datos sincronizar. |
| ee-database pair --server URL <token> | Empareje con un token emitido en la página Bases de datos (compatible con entornos headless). |
| ee-database run --dsn DSN [--save-dsn] [--skip-bootstrap] | Arranque desde la instantánea (salvo que se omita), luego conéctese y aplique los deltas. |
| ee-database run … --create-missing | Cree primero la base de datos de destino cuando no exista, usando las propias credenciales del DSN (postgres necesita CREATEDB; mysql, el privilegio CREATE; los archivos sqlite se crean automáticamente de todos modos). |
| ee-database run … --create-missing --admin-dsn DSN | Inicialice a través de una conexión de administrador todo lo que nombra el DSN de destino: el rol o usuario que falta (con la contraseña del DSN) y la base de datos de su propiedad. Así, el DSN de destino no necesita permisos de creación; el DSN de administrador nunca se almacena. |
| ee-database run --all | Sincroniza todas las bases de datos emparejadas de forma concurrente desde un solo proceso (cada una necesita un DSN guardado). |
| ee-database status | Muestra el estado del emparejamiento, la URL del servidor y las bases de datos emparejadas. |
| ee-database disconnect | Olvida las credenciales locales de un emparejamiento. Revoque en el servidor desde la interfaz. |
| ee-database version | Versión para imprimir. |
Las credenciales se almacenan en modo 600, un perfil por cada base de datos emparejada, en ~/.config/ee-database/profiles/ — empareje una vez por base de datos, y --database NAME selecciona una cuando hay varias emparejadas. ¿Prefiere no usar automatización alguna? El mismo feed también es REST plano: GET /api/databases//changes y luego POST /api/databases//ack — consulte Bases de datos.
El cliente tiene licencia MIT y reside en un repositorio público para que cualquiera pueda auditar exactamente qué se ejecuta contra su base de datos.
Código fuente: github.com/TOT-Concept/ee-database
Versiones: github.com/TOT-Concept/ee-database/releases — cada binario se firma antes de su publicación.