Un desarrollador crea con IA la CLI Terox en un par de días para consultar 128 shards de PostgreSQL a la vez
Un desarrollador backend y antiguo DBA se cansó de buscar registros en un centenar de shards de PostgreSQL mediante bucles alrededor de psql. Con ayuda de la IA, creó la CLI Terox en un par de días: un único archivo de configuración con plantillas de hosts, consultas a todos los shards y migraciones con tiempos de espera. La principal lección del vibe coding: definir primero los invariantes y después pedir el código.
Procesado por IA desde Habr AI; editado por Hamidun News
Cuando se tienen un centenar de shards de PostgreSQL, una pregunta tan sencilla como «¿En cuál está este registro?» se convierte en una odisea: localizar el host, recordar el puerto y la base de datos, abrir psql, ejecutar la consulta y pasar al siguiente. Un desarrollador backend que antes trabajaba como DBA se cansó de soportarlo. Con ayuda de la IA, creó Terox en un par de días: una CLI interactiva para clústeres distribuidos en shards.
Qué problema resuelve
En psql y pgAdmin, la unidad de trabajo es una conexión. En un sistema distribuido en shards, es todo un conjunto de conexiones. Un bucle de bash alrededor de psql sirve para una tarea puntual, pero se queda corto como herramienta de uso diario: carece de límites de concurrencia, cancelación de consultas, registro de errores por shard y protecciones frente al acceso accidental a producción.
Terox introduce entidades de nivel superior: servicio → almacenamiento → uno, varios o todos los shards. Los hosts y las bases de datos se definen mediante plantillas; por ejemplo, pgbouncer-shop-rs{p1:03}.example.net se expande en 128 direcciones. Una consulta dirigida a all se ejecuta en todos los shards, los resultados se combinan en una sola tabla con una columna shard y los errores se muestran por separado.
Cómo funciona en la práctica
El comando \find items item_id = 424242 recorre los shards, indica que el registro se encontró en shard_37 y cambia automáticamente el contexto a ese shard. No hace falta copiar el host ni adivinar dónde está.
La implementación interna está cuidada. El parámetro fanout_concurrency impide que el cliente lance consultas contra los 128 shards a la vez. El pool de conexiones de cada shard se crea bajo demanda, cada shard tiene su propio plazo límite y Ctrl+C cancela las consultas en ejecución. Las lecturas se realizan dentro de una transacción READ ONLY real de PostgreSQL, sin depender del análisis del texto SQL. La escritura debe habilitarse explícitamente con \write on y se desactiva al cambiar de contexto.
También incluye funciones específicas de diagnóstico (\activity, \blockers, \longtx, \sizes, \diff, \doctor) y un linter que detecta DELETE sin WHERE o NOT IN con valores que pueden ser NULL.
Migraciones para casos excepcionales
El autor subraya que las migraciones habituales se ejecutan junto con el despliegue. Terox está pensado para excepciones en tablas grandes y con mucha carga. Sin la opción --allowed, el comando \migrate funciona como dry-run. Admite ejecuciones canary, lotes y --resume, y una suma de comprobación impide continuar el despliegue con un archivo modificado.
No existe una transacción común a los 128 servidores, por lo que algunos shards pueden haber confirmado ya los cambios. El informe muestra explícitamente la aplicación parcial y las migraciones deben ser idempotentes. Para CREATE INDEX CONCURRENTLY y VACUUM, que no pueden envolverse en una transacción con SET LOCAL, Terox advierte de la ejecución sin protección y exige una confirmación adicional en producción.
Qué nos dice sobre el vibe coding
El proceso consistió en describir el problema, encontrar un modelo mínimo de comportamiento, obtener una implementación de la IA, comprobarla manualmente y con pruebas, y convertir cada caso límite en una nueva prueba. Así surgieron el cierre de los pools al salir, un historial sin contraseñas y las pruebas de condiciones de carrera.
La principal conclusión del autor: la IA implementa una idea equivocada con la misma rapidez y pulcritud, y lo hace en doce archivos a la vez. Por eso conviene definir primero los invariantes: no quedan conexiones abiertas al salir, PostgreSQL garantiza el acceso de solo lectura, el cambio de contexto desactiva la escritura y un fallo parcial no se presenta como un éxito. Así, la conversación con la IA se convierte en trabajo de ingeniería.
Limitaciones
El análisis estático de Terox es heurístico. Los límites de seguridad siguen dependiendo de los permisos del rol, las transacciones READ ONLY, TLS y los tiempos de espera. La herramienta no sustituye la monitorización, las copias de seguridad ni la comprensión de los planes de consulta, y tampoco corrige la arquitectura de sharding.
La conclusión práctica: si se trabaja habitualmente con decenas de bases de datos, conviene convertir ese bucle en una herramienta que recuerde las reglas. Y al trabajar con IA, empezar por los invariantes antes que por el código.
- 12 nov 2026Claude in Chrome exige autorizar cada clic en los sitios de categoría 3
- 12 nov 2026AWS Quick incorpora seis agentes para product managers: de las quejas de los clientes a la especificación
- 12 nov 2026Anthropic cierra Claude desde el 12 de noviembre a las empresas de Rusia, incluso con entidad jurídica en el extranjero
- 12 nov 2026La IA ayudó a escribir el código: el estudio debe separar los derechos sobre 3 partes del producto
Preguntas frecuentes sobre la noticia
¿Qué se sabe sobre Qué problema resuelve?
En psql y pgAdmin, la unidad de trabajo es una conexión. En un sistema distribuido en shards, es todo un conjunto de conexiones. Un bucle de bash alrededor de psql sirve para una tarea puntual, pero se queda corto como herramienta de uso diario: carece de límites de concurrencia, cancelación de consultas, registro de errores por shard y protecciones frente al acceso accidental a producción. Terox introduce entidades de nivel superior: servicio → almacenamiento → uno, varios o todos los shards.
Cómo funciona en la práctica?
El comando \find items item_id = 424242 recorre los shards, indica que el registro se encontró en shard_37 y cambia automáticamente el contexto a ese shard. No hace falta copiar el host ni adivinar dónde está. La implementación interna está cuidada. El parámetro fanout_concurrency impide que el cliente lance consultas contra los 128 shards a la vez. El pool de conexiones de cada shard se crea bajo demanda, cada shard tiene su propio plazo límite y Ctrl+C cancela las consultas en ejecución.
¿Qué se sabe sobre Migraciones para casos excepcionales?
El autor subraya que las migraciones habituales se ejecutan junto con el despliegue. Terox está pensado para excepciones en tablas grandes y con mucha carga. Sin la opción --allowed, el comando \migrate funciona como dry-run. Admite ejecuciones canary, lotes y --resume, y una suma de comprobación impide continuar el despliegue con un archivo modificado. No existe una transacción común a los 128 servidores, por lo que algunos shards pueden haber confirmado ya los cambios.
Test Frontier LLMs & Autonomous Agents in One Workspace
Run Claude Opus 5.5, GPT-6, Gemini 3.1, and DeepSeek side-by-side in Nomad AI (nomadnet.ai) — unified model routing, deep research, and multimodal workflows under one subscription.
Lo esencial de la IA — una vez por semana
Siete historias que de verdad importaron, elegidas a mano. Sin ruido ni notas de prensa.
¡Listo! Revisa tu correo para la confirmación.