La mejor base de datos para un agente de programación: PostgreSQL para el estado, búsqueda híbrida para la recuperación.
La mejor base de datos para un agente de programación: PostgreSQL para el estado de ejecución, las llamadas a herramientas y los artefactos, además de una capa de búsqueda híbrida con una bandeja de salida cuando sea importante poder recuperar información.
Fuentes: The Best Database for Coding Agents? Postgres for State, Weaviate for Recall
Elija una base de datos para un agente de programación basándose en lo que hace el agente durante todo el día, y no en su etiqueta de IA. Un agente que ejecuta comandos en entornos aislados, llama a herramientas, transmite registros, genera archivos, vuelve a intentar los pasos fallidos y reanuda su trabajo tras las interrupciones, en su mayor parte se dedica a tareas de contabilidad con efectos secundarios. Para esas tareas de contabilidad, PostgreSQL es la opción por defecto más sólida. Un almacén de vectores como Weaviate cobra importancia más tarde, como capa separada, cuando el producto necesita encontrar fallos y soluciones anteriores similares por su significado.
Comience con una sola llamada a herramienta
Siga el proceso de una única invocación de herramienta a través del sistema. Antes de que se ejecute, la plataforma marca la llamada como iniciada, la relaciona con una ejecución, reserva una clave de idempotencia, anota qué entorno aislado se utiliza y coloca en cola las tareas posteriores. Una vez finalizada, registra el estado, los metadatos de salida y los artefactos, actualiza los totales de uso y avanza la ejecución principal.
Esas operaciones representan una transición lógica. Con las transacciones, se confirman juntas o no se confirman en absoluto, y las otras sesiones nunca ven un estado a medio completar. Ahora consideremos las fallas: un proceso muere entre “herramienta finalizada” y “ejecutar avanzado”, y la recuperación debe ser determinista. Si se realiza un intento de repetición dos veces, una restricción única debería rechazar la duplicación. Un artefacto apunta a una ejecución que no existe, y una clave foránea debería rechazar esa fila. Nada de esto es exótico; se trata de tareas habituales en las bases de datos, de las cuales depende constantemente un agente de programación, por lo que superan con creces cualquier estrategia de marketing “nativa de IA”.
Los datos son relacionales
Las entidades principales de un agente de ejecución no son misteriosas, y se conectan entre sí:
- Ejecuciones: almacenan el estado del ciclo de vida, el propietario, el espacio de trabajo, el modelo, las marcas de tiempo, el presupuesto y el resultado final.
- Pasos son unidades de trabajo planificadas o completadas que presentan dependencias entre sí.
- Llamadas a herramientas registran las entradas, salidas, estado, latencia, cantidades de intentos y claves de idempotencia.
- Ejecuciones en entorno aislado describen el entorno, los metadatos de los comandos, el código de salida, el uso de recursos y las razones por las que finalizaron.
- Eventos constituyen un historial de solo escritura para la depuración, la transmisión en tiempo real y la reproducción.
- Artefactos apuntan a parches, informes, archivos generados o ubicaciones de almacenamiento de objetos.
- Puntos de control almacenan lo necesario para reanudar un flujo de trabajo.
Cada uno necesita una identidad estable y enlaces explícitos con los demás. Las claves primarias, las restricciones únicas, las restricciones de verificación y las claves foráneas dificultan la creación de estados inválidos, y las claves foráneas en particular garantizan que cada llamada a la herramienta pertenezca a una ejecución real y que cada artefacto tenga un origen claro.
Mantenga los campos que facilitan la coordinación en columnas tipadas con índices adecuados: estado, inquilino, ID de ejecución, marcas de tiempo, número de intentos y clave de idempotencia. Estos elementos son esenciales para la programación de tareas, el filtrado, la conservación de datos y los paneles de control. Ocultarlos dentro de un único documento JSON grande e indiferenciado hace que sea mucho más difícil aplicar esas reglas.
Dónde encaja jsonb
Las herramientas cambian rápidamente. Una devuelve diagnósticos del compilador, otra emite eventos del navegador y una tercera informa sobre metadatos del repositorio. Tener una columna fija para cada campo posible sería un desperdicio; jsonb es adecuado para las partes que varían: argumentos de la herramienta, respuestas del proveedor, configuración del entorno aislado y metadatos del modelo. PostgreSQL permite consultar JSON con operadores y expresiones de ruta, además de indexar claves y valores mediante GIN, con las ventajas y desventajas documentadas en el manual oficial.
El patrón eficaz consiste en un contenedor relacional tipado alrededor de un payload flexible. Todo lo necesario para garantizar integridad o realizar consultas comunes se mantiene en columnas, mientras que los datos de extensiones se almacenan en jsonb. Esto evita ambos extremos: columnas frágiles para cada experimento y un almacén de documentos opaco que deja todas las relaciones en el código de la aplicación.
Ajustar el almacenamiento al patrón de acceso
No todo debe almacenarse en la base de datos principal. Extractos breves de stderr, detalles de errores normalizados, códigos de salida y resúmenes buscables pueden incluirse junto al registro de ejecución. Los grandes flujos de la consola, los archivos del repositorio, los binarios, las capturas de pantalla y los resultados de compilación suelen ir a almacenamiento de objetos, donde PostgreSQL los referencia mediante metadatos duraderos y checksums.
Esa separación mantiene las filas pequeñas al tiempo que preserva el origen de los datos. La base de datos sigue siendo la fuente autorizada para determinar si un artefacto existe, qué ejecución lo generó, dónde se encuentra y cómo se aplica su retención, mientras que el almacenamiento de objetos permite gestionar grandes bloques inmutables de forma más económica. Una precaución: nunca considere que una carga se completó con éxito hasta que el flujo de trabajo cuente con un plan de recuperación para fallos parciales.
La historia de eventos también es útil. En lugar de reescribir una y otra vez un documento extenso de ejecución, registre las transiciones significativas y mantenga una fila compacta del estado actual para lecturas rápidas. La historia sirve para auditorías y diagnósticos, la proyección se utiliza en la interfaz de usuario del producto y en el programador, y ambas pueden almacenarse en PostgreSQL dentro de las mismas transacciones.
El protocolo de escritura es tan importante como el motor
Un agente en producción se enfrentará a entregas duplicadas, caídas de trabajadores, tiempos de espera de red y resultados de herramientas que nadie puede confirmar. Elegir una base de datos es solo la mitad de la solución. Un protocolo funcional se ve así:
- Proporcione a las operaciones reintentables una clave de idempotencia respaldada por una restricción única.
- Modele los cambios en el ciclo de vida como transiciones de estado con nombre, no como actualizaciones de estado sin formato definido.
- Confirme las filas relacionadas en una sola transacción siempre que la visibilidad parcial sea incorrecta.
Quienes buscan la mejor base de datos para un agente de programación no se limitan a guardar mensajes de chat. También coordinan efectos secundarios como la edición de archivos, la ejecución de código no confiable, la llamada a APIs de pago y la publicación de cambios. La capa de estado debe garantizar que cada transición sea inspeccionable y recuperable.
Cuando la capa de recuperación resulta útil
PostgreSQL sigue siendo la principal recomendación. Agregue un almacén de recuperación dedicado cuando el producto tenga una necesidad específica: buscar en el historial de ejecuciones anteriores tanto por significado como por texto exacto. Las consultas típicas son “¿cuáles ejecuciones anteriores fallaron tras una actualización de dependencias?”, “¿qué errores se solucionaron con este rastro de pila?” y “¿qué secuencia de herramientas corrigió una prueba inestable?”.
En esa búsqueda siguen siendo importantes los tokens exactos: nombres de excepciones, versiones de paquetes, códigos del compilador, flags, nombres de archivos y hashes. Sin embargo, los usuarios describen el mismo fallo de muchas maneras. La búsqueda puramente por palabras clave ignora los vínculos conceptuales, mientras que la similitud vectorial pura puede subestimar las cadenas literales en las que confían los ingenieros. La búsqueda híbrida abarca ambos enfoques. Weaviate es uno de los motores que ejecuta simultáneamente la búsqueda vectorial y la búsqueda por palabras clave BM25, fusionando las puntuaciones en una única clasificación, de modo que un código literal como ERR_MODULE_NOT_FOUND aporta evidencia basada en palabras clave, mientras que la frase “el tiempo de ejecución no puede resolver un paquete importado” aporta evidencia semántica.
Debe mantenerse explícita la delimitación. PostgreSQL es responsable de las ejecuciones canónicas, las llamadas a herramientas, los permisos y el estado. Un trabajador asíncrono lee los cambios confirmados, crea un documento de recuperación a partir de los campos seleccionados y lo inserta en el índice de búsqueda. Los resultados devuelven los IDs de PostgreSQL, por lo que la aplicación obtiene el registro oficial y vuelve a verificar el acceso antes de mostrar cualquier contenido. Si el indexado se retrasa o debe reconstruirse, la corrección de la ejecución no se ve afectada.
Añadir un segundo sistema solo tiene sentido una vez que la recuperación semántica sea una función real. Hasta entonces, la búsqueda de texto completo de PostgreSQL junto con consultas estructuradas bien indexadas pueden ser suficientes.
Estructura de referencia en cinco partes
- Estado oficial en PostgreSQL. Ejecuciones, pasos, llamadas a herramientas, resultados del entorno aislado, metadatos de los artefactos, puntos de control y relaciones de acceso.
- Cargas grandes en almacenamiento de objetos. PostgreSQL guarda las ubicaciones, hashes, tipos de contenido, propietarios y datos de retención.
- Una bandeja de salida para los cambios confirmados. Los procesadores transmiten actualizaciones de la interfaz, programan tareas posteriores y crean proyecciones de búsqueda sin procesar datos no confirmados.
- Recuperación de documentos en un índice vectorial o híbrido, cuando es necesario. Incluye resúmenes, errores normalizados, comandos, extractos de registros seleccionados, descripciones de correcciones y metadatos filtrables.
- Los resultados de búsqueda se resuelven contra PostgreSQL. El índice encuentra candidatos, y la base de datos sigue siendo la fuente autorizada sobre el estado actual y los permisos.
La eliminación y la conservación también se vuelven más fáciles de comprender. Una eliminación o edición comienza en PostgreSQL, pasa por la bandeja de salida, elimina los objetos relacionados y actualiza la proyección de búsqueda, de modo que la fuente de verdad nunca es ambigua.
Qué evitar desde el principio
- Un banco de datos vectorial simplemente porque existe un LLM. Las preguntas operativas iniciales suelen ser estructuradas, como ejecuciones para un usuario en un estado determinado, pasos que fallaron recientemente, llamadas a herramientas lentas o ejecuciones vinculadas a un commit. Los índices ordinarios responden a ellas.
- Un único bloque JSON para todo el estado del agente. Esto sacrifica la conveniencia a corto plazo por restricciones débiles, actualizaciones concurrentes complicadas y consultas sobre el ciclo de vida problemáticas. Los metadatos flexibles están bien, pero un sistema de registros no estructurado no lo está.
- Búsqueda dentro de la transacción crítica. El agente debe finalizar la llamada a la herramienta incluso cuando el indexado semántico está retrasado. La bandeja de salida y la proyección asíncrona protegen ese límite.
Lista de verificación
Elige PostgreSQL primero si necesitas:
- transacciones ACID de múltiples filas sobre registros de ejecución,
- vínculos obligatorios entre ejecuciones, pasos, llamadas, usuarios y artefactos,
- reintentos seguros y control de concurrencia,
- filtrado simple por estado, tiempo, propietario, costo o resultado,
- metadatos
jsonbque aún puedas consultar, - un registro duradero para recuperación y auditoría.
Agrega un motor de recuperación híbrido cuando también necesites:
- búsqueda basada en el significado sobre ejecuciones anteriores e historial de llamadas a herramientas,
- un ranking que tenga en cuenta tanto los tokens de error exactos como expresiones similares.
- encontrar incidentes relacionados, soluciones y flujos de trabajo que funcionaron,
- una capa de recuperación que pueda regenerarse a partir de registros canónicos.
Respuestas rápidas
¿Debería ser la base de datos vectorial el backend principal? Generalmente no. La carga de trabajo principal es de tipo transaccional: ejecuciones, llamadas a herramientas, resultados, intentos de repetición y relaciones. Un almacén vectorial sirve para una carga de trabajo de recuperación separada.
¿Es suficiente jsonb para los metadatos de los agentes? A menudo sí, para payloads de herramientas en evolución y detalles específicos del proveedor, siempre y cuando las columnas tipadas contengan identificadores y campos relacionados con el ciclo de vida. Complementa el esquema sin reemplazarlo.
¿Por qué búsqueda híbrida para los registros de logs? Los datos de ingeniería combinan tokens precisos con lenguaje natural. BM25 muestra códigos exactos, nombres de paquetes y nombres de archivos, mientras que la búsqueda vectorial relaciona descripciones de un mismo fallo formuladas de manera diferente.
El mejor diseño consiste en una división del trabajo y no en una competencia entre sistemas relacionales y vectoriales. PostgreSQL proporciona la estructura transaccional: ejecución, registros, historial de llamadas a herramientas, metadatos, puntos de control y artefactos. Cuando el historial de ejecución se convierte en un activo de conocimiento, una capa híbrida de recuperación añade la capacidad de recuperación. Postgres para el estado, un índice de recuperación para la recuperación eficiente.
Leer más
- Siete agentes de programación AI que vale la pena comparar antes de que termine 2026 — Comparación de Claude Code, Cursor, Copilot, Codex, OpenCode, Devin y Antigravity CLI: qué hacen mejor cada uno, cómo se cotizan a agosto de 2026 y cómo combinarlos.
- Notas prácticas: Qwen 3.8 finalmente está disponible, codificación agente de nivel Opus con local — Guía paso a paso de las Notas prácticas: Qwen 3.8 finalmente está disponible, codificación agente de nivel Opus con local: contratos, verificaciones y espacios para código reutilizable para los equipos que implementan este patrón.