Esta página describe Calíope 1.5, la versión que estamos construyendo ahora mismo. La 1.4 está terminada y en revisión de App Store, y la tienda sirve hoy la 1.3 en el Mac y la 1.2 en iPad. El changelog dice en qué versión llegó cada función.
Añade un botón «Abrir en Calíope» a cada tema. Sólo funciona con la app instalada.
Busca un texto en todas las columnas de texto de una base de datos y reemplázalo en masa, con previsualización del resultado.
Dónde está: Espacio de Trabajo › Herramientas › Buscar
Búsqueda global recorre las tablas que marques y te dice en qué columnas aparece un texto, cuántas veces y con qué aspecto.
Cómo se usa
1. Elige la base de datos en la cabecera.
2. Marca las tablas en el árbol de la izquierda. El pie te dice cuántas hay.
3. Escribe el texto y pulsa Buscar.
4. Despliega una tabla para ver en qué columnas está y algunas filas de ejemplo.
Cada coincidencia se puede abrir en el editor SQL con su SELECT ya escrito, por si quieres verla en su contexto o refinarla a mano.
Una base por búsqueda. Es a propósito: buscar en todo un servidor multiplica el recorrido y convierte los resultados en una lista imposible de revisar. Si necesitas varias bases, repite la búsqueda en cada una.
Se puede detener. Mientras corre, la cabecera enseña el avance por tablas y un botón Detener; la búsqueda también aparece en el panel de Actividad, así que puedes irte a otra pestaña y volver sin perderla.
Palabras clave: buscar, reemplazar, sustituir, texto, global, todas las tablas, masivo
Buscar texto dentro de una columna no puede usar índices: se lee toda la tabla, y Calíope te dice cuánto antes de empezar.
Buscar un texto dentro de una columna no puede aprovechar ningún índice. No es una limitación de Calíope: es cómo funcionan las bases de datos relacionales. Un índice sabe ordenar por el principio de un valor, no por lo que hay en medio.
Eso significa que cada búsqueda lee todas las filas de todas las tablas marcadas. Por eso, antes de empezar, verás un aviso con cuántas tablas se van a recorrer y cuánto ocupan.
Cómo hacerla más rápida
- Marca sólo las tablas donde tenga sentido buscar, en vez de todas.
- Empieza por las tablas pequeñas para confirmar que el texto es el correcto, y luego amplía.
- Si el servidor está al otro lado de un túnel SSH, cuenta con que la latencia se nota.
El tamaño que se muestra lo declara el catálogo del servidor, así que es una estimación: en tablas muy activas puede quedarse corto o largo.
Palabras clave: coste, lento, índices, rendimiento, tamaño, escaneo, tablas grandes
Por qué se encuentran más filas de las que se reemplazan
La búsqueda usa las reglas del servidor y no distingue mayúsculas; el reemplazo sí. Calíope te enseña la diferencia con su cifra exacta.
Es la trampa más importante de esta herramienta, y por eso Calíope la enseña en vez de esconderla.
Buscar y reemplazar no comparan igual. Quien decide si dos textos coinciden en una búsqueda es la collation de la columna, que en la mayoría de las bases no distingue mayúsculas de minúsculas: buscar foo encuentra también Foo y FOO. El reemplazo, en cambio, siempre distingue: sólo cambiaría foo.
El resultado, si nadie lo advierte, es un reemplazo que anuncia 300 filas y cambia 100, sin que nada falle y sin ningún mensaje de error. Los datos quedan a medio migrar.
Qué hace Calíope
- Cuenta las dos cosas por separado en la misma consulta y te enseña el aviso con las dos cifras.
- En cada columna, junto al total, aparece cuántas filas son reemplazables de verdad.
- La previsualización sólo muestra filas que van a cambiar.
Qué puedes hacer
- Marca Distinguir mayúsculas al buscar: entonces lo que encuentras es exactamente lo que se reemplazará, y el aviso desaparece.
- O haz varias pasadas, una por cada forma escrita (foo, Foo, FOO).
Se busca en todas las de texto, pero algunas no se pueden escribir; Calíope dice cuáles y por qué.
Se busca en todas las columnas de texto: texto corto y largo, listas cerradas y documentos JSON.
No se reemplaza en cuatro casos, y en cada uno la columna aparece marcada con un candado y su motivo:
Motivo
Por qué
El servidor calcula la columna
Su valor sale de otras columnas; escribirlo no tiene efecto
Sólo admite valores de una lista cerrada
Un reemplazo puede dejar un valor fuera de la lista, y algunos servidores lo convierten en texto vacío sin avisar
Forma parte de la clave primaria
Cambiarla puede romper las relaciones con otras tablas
Tiene un índice único
El valor nuevo puede chocar con otro que ya existe
Las tablas sin clave primaria no se reemplazan, y se dice en la ventana de confirmación. Sin clave no hay forma de identificar cada fila, y una escritura que empareje de más tocaría registros que nadie ha visto.
Las vistas quedan fuera. Algunas admiten escritura, pero saber cuáles exige analizar su definición, y el riesgo no compensa.
El reemplazo pasa siempre por una previsualización calculada por el servidor, y puedes llevarte el SQL al editor en vez de ejecutarlo.
Un reemplazo global es una escritura masiva sobre datos que no has visto de uno en uno. Por eso no se puede lanzar sin pasar por la ventana de revisión.
Lo que ves antes de escribir
1. Qué tablas y columnas se van a tocar, y cuántas filas en cada una.
2. La previsualización antes → después, fila a fila.
3. Los avisos que apliquen: la diferencia entre lo encontrado y lo reemplazable, las columnas bloqueadas y las claves foráneas que dependen de lo que vas a cambiar.
La previsualización la calcula el servidor, con la misma operación que hará la escritura. No es una simulación de Calíope: así lo que ves es literalmente lo que se va a guardar, incluidos los recortes por longitud máxima que de otro modo descubrirías demasiado tarde.
Ver el guion te da el SQL completo para copiarlo y ejecutarlo tú, o guardarlo. Ese botón no escribe nada.
Dos frenos más
- Por encima de mil filas hay que teclear el número para confirmar.
- Cada tabla se escribe dentro de su propia transacción, y al terminar se comprueba que las filas cambiadas coinciden con las anunciadas. Si no cuadran, se dice.
No hay deshacer. Si vas a tocar datos que importan, haz antes un respaldo desde la herramienta de Respaldo.