Diese Seite beschreibt Calíope 1.5, die Version, die wir gerade bauen. Die 1.4 ist fertig und in der App-Review, und der Store liefert heute 1.3 auf dem Mac und 1.2 auf dem iPad. Das Changelog sagt, in welcher Version jede Funktion kam.
Fügt jedem Thema einen Button „In Calíope öffnen“ hinzu. Funktioniert nur mit installierter App.
Suchen Sie einen Text in allen Textspalten einer Datenbank und ersetzen Sie ihn massenhaft, mit Vorschau des Ergebnisses.
Wo es zu finden ist: Workspace › Werkzeuge › Suchen
Globale Suche durchsucht die von Ihnen gewählten Tabellen und zeigt, in welchen Spalten ein Text vorkommt, wie oft und in welcher Form.
So wird sie benutzt
1. Wählen Sie die Datenbank in der Kopfzeile.
2. Markieren Sie Tabellen im Baum links.
3. Geben Sie den Text ein und drücken Sie Suchen.
4. Klappen Sie eine Tabelle auf, um die betroffenen Spalten und Beispielzeilen zu sehen.
Jeder Treffer lässt sich mit fertigem SELECT im SQL-Editor öffnen, um ihn im Zusammenhang zu sehen oder von Hand zu verfeinern.
Eine Datenbank pro Suche. Das ist Absicht: Ein ganzer Server vervielfacht den Durchlauf und macht die Ergebnisse unüberprüfbar. Für mehrere Datenbanken wiederholen Sie die Suche.
Sie lässt sich stoppen. Während des Laufs zeigt die Kopfzeile den Fortschritt pro Tabelle und eine Schaltfläche Stoppen; die Suche erscheint auch im Aktivitätsbereich, Sie können also den Tab wechseln, ohne sie zu verlieren.
Stichwörter: suchen, ersetzen, text, global, alle Tabellen, massenhaft
Eine Suche innerhalb einer Spalte kann keine Indizes nutzen: Alles wird gelesen, und Calíope sagt vorher, wie viel.
Die Suche nach Text innerhalb einer Spalte kann keinen Index nutzen. Das ist keine Einschränkung von Calíope, sondern die Arbeitsweise relationaler Datenbanken: Ein Index kann nach dem Anfang eines Wertes ordnen, nicht nach dem, was in der Mitte steht.
Deshalb liest jede Suche alle Zeilen aller ausgewählten Tabellen. Darum sehen Sie vorher einen Hinweis, wie viele Tabellen durchsucht werden und wie viel Platz sie belegen.
So wird es schneller
- Wählen Sie nur die Tabellen, in denen die Suche sinnvoll ist.
- Beginnen Sie mit kleinen Tabellen, um den Text zu prüfen, und weiten Sie dann aus.
- Hinter einem SSH-Tunnel macht sich die Latenz deutlich bemerkbar.
Die angezeigte Größe stammt aus dem Serverkatalog und ist eine Schätzung: Bei stark genutzten Tabellen kann sie zu niedrig oder zu hoch liegen.
Stichwörter: Kosten, langsam, Indizes, Leistung, Größe, Durchlauf, große Tabellen
Die Suche folgt den Serverregeln und ignoriert die Groß-/Kleinschreibung, das Ersetzen nicht. Calíope zeigt den genauen Unterschied.
Das ist die wichtigste Falle dieses Werkzeugs, und darum zeigt Calíope sie, statt sie zu verstecken.
Suchen und Ersetzen vergleichen nicht gleich. Ob zwei Texte bei einer Suche übereinstimmen, entscheidet die Kollation der Spalte, die in den meisten Datenbanken die Groß- und Kleinschreibung ignoriert: Die Suche nach foo findet auch Foo und FOO. Das Ersetzen unterscheidet dagegen immer und würde nur foo ändern.
Ohne Hinweis entsteht ein Ersetzen, das 300 Zeilen ankündigt und 100 ändert — ohne Fehler und ohne Meldung. Die Daten bleiben halb migriert.
Was Calíope tut
- Es zählt beides getrennt in derselben Abfrage und zeigt die Warnung mit beiden Zahlen.
- Neben der Gesamtzahl jeder Spalte steht, wie viele Zeilen wirklich ersetzbar sind.
- Die Vorschau zeigt nur Zeilen, die sich tatsächlich ändern.
Was Sie tun können
- Aktivieren Sie Groß-/Kleinschreibung beachten: Dann ist das Gefundene genau das, was ersetzt wird, und die Warnung verschwindet.
- Oder machen Sie mehrere Durchgänge, einen pro Schreibweise (foo, Foo, FOO).
Durchsucht werden alle Textspalten, aber manche lassen sich nicht schreiben; Calíope sagt welche und warum.
Gesucht wird in allen Textspalten: kurzer und langer Text, feste Listen und JSON-Dokumente.
Ersetzt wird in vier Fällen nicht, und die Spalte trägt dann ein Schloss mit ihrem Grund:
Grund
Warum
Der Server berechnet die Spalte
Ihr Wert stammt aus anderen Spalten; Schreiben bleibt wirkungslos
Nimmt nur Werte aus einer festen Liste an
Ein Ersetzen kann aus der Liste herausführen, und manche Server machen daraus ohne Warnung leeren Text
Teil des Primärschlüssels
Eine Änderung kann Beziehungen zu anderen Tabellen zerstören
Hat einen eindeutigen Index
Der neue Wert kann mit einem vorhandenen kollidieren
Tabellen ohne Primärschlüssel werden nicht ersetzt, und das steht im Bestätigungsfenster. Ohne Schlüssel lassen sich einzelne Zeilen nicht identifizieren, und ein zu breiter Treffer würde Datensätze berühren, die niemand gesehen hat.
Sichten bleiben außen vor. Manche sind beschreibbar, aber herauszufinden welche, verlangt eine Analyse ihrer Definition — das Risiko lohnt nicht.
Ein Ersetzen führt immer über eine vom Server berechnete Vorschau, und Sie können das SQL in den Editor mitnehmen, statt es auszuführen.
Ein globales Ersetzen ist ein Massenschreiben über Daten, die Sie nicht einzeln gesehen haben. Darum lässt es sich nicht ohne das Prüffenster starten.
Was Sie sehen, bevor etwas geschrieben wird
1. Welche Tabellen und Spalten berührt werden und wie viele Zeilen jeweils.
2. Die Vorschau vorher → nachher, Zeile für Zeile.
3. Die zutreffenden Warnungen: der Abstand zwischen Gefundenem und Ersetzbarem, die gesperrten Spalten und die Fremdschlüssel, die von der Änderung abhängen.
Die Vorschau berechnet der Server mit derselben Operation, die auch schreiben wird. Es ist keine Simulation: Was Sie sehen, ist buchstäblich das, was gespeichert wird — samt Kürzungen durch die Maximallänge, die Sie sonst viel zu spät entdecken würden.
Skript ansehen liefert das vollständige SQL zum Kopieren, selbst Ausführen oder Aufbewahren. Diese Schaltfläche schreibt nichts.
Zwei weitere Bremsen
- Über tausend Zeilen muss die Zahl zur Bestätigung eingetippt werden.
- Jede Tabelle wird in einer eigenen Transaktion geschrieben, und danach werden die geänderten Zeilen mit den angekündigten verglichen. Stimmen sie nicht überein, wird es gesagt.
Es gibt kein Rückgängig. Wenn die Daten wichtig sind, legen Sie vorher eine Sicherung mit dem Backup-Werkzeug an.