Questa pagina descrive Calíope 1.5, la versione che stiamo costruendo adesso. La 1.4 è finita ed è in revisione sull'App Store, e il negozio serve oggi la 1.3 sul Mac e la 1.2 su iPad. Il changelog dice in quale versione è arrivata ogni funzione.
Aggiunge a ogni argomento un pulsante «Apri in Calíope». Funziona solo con l'app installata.
Cerca un testo in tutte le colonne di testo di un database e sostituiscilo in blocco, con anteprima del risultato.
Dove si trova: Workspace › Strumenti › Cerca
Ricerca globale percorre le tabelle che selezioni e indica in quali colonne compare un testo, quante volte e con quale aspetto.
Come si usa
1. Scegli il database nell’intestazione.
2. Seleziona le tabelle nell’albero a sinistra.
3. Scrivi il testo e premi Cerca.
4. Espandi una tabella per vedere le colonne coinvolte e alcune righe di esempio.
Ogni corrispondenza si può aprire nell’editor SQL con la sua SELECT già scritta, per vederla nel contesto o affinarla a mano.
Un database per ricerca. È voluto: cercare in un intero server moltiplica il percorso e rende i risultati impossibili da rivedere. Per più database, ripeti la ricerca.
Si può fermare. Durante l’esecuzione l’intestazione mostra l’avanzamento per tabella e un pulsante Ferma; la ricerca compare anche nel pannello Attività, così puoi cambiare scheda senza perderla.
Parole chiave: cercare, sostituire, testo, globale, tutte le tabelle, blocco
Cercare dentro una colonna non può usare indici: si legge tutto, e Calíope dice quanto prima di iniziare.
Cercare un testo dentro una colonna non può sfruttare alcun indice. Non è un limite di Calíope: è il funzionamento dei database relazionali. Un indice sa ordinare per l’inizio di un valore, non per quello che sta nel mezzo.
Perciò ogni ricerca legge tutte le righe di tutte le tabelle selezionate. Per questo, prima di iniziare, vedi un avviso con quante tabelle verranno percorse e quanto occupano.
Come renderla più veloce
- Seleziona solo le tabelle in cui ha senso cercare.
- Parti dalle tabelle piccole per confermare il testo, poi allarga.
- Se il server è dietro un tunnel SSH, la latenza si fa sentire.
La dimensione mostrata proviene dal catalogo del server, quindi è una stima: su tabelle molto attive può risultare imprecisa.
Parole chiave: costo, lento, indici, prestazioni, dimensione, scansione, tabelle grandi
Perché si trovano più righe di quante se ne sostituiscono
La ricerca segue le regole del server e non distingue le maiuscole; la sostituzione sì. Calíope mostra la differenza esatta.
È la trappola più importante di questo strumento, ed è per questo che Calíope la mostra invece di nasconderla.
Cercare e sostituire non confrontano allo stesso modo. A decidere se due testi corrispondono in una ricerca è la collation della colonna, che nella maggior parte dei database ignora le maiuscole: cercare foo trova anche Foo e FOO. La sostituzione, invece, distingue sempre: cambierebbe solo foo.
Senza avvisi, il risultato è una sostituzione che annuncia 300 righe e ne cambia 100, senza errori e senza messaggi. I dati restano migrati a metà.
Che cosa fa Calíope
- Conta le due cose separatamente nella stessa query e mostra l’avviso con entrambe le cifre.
- Accanto al totale di ogni colonna compare quante righe sono davvero sostituibili.
- L’anteprima mostra solo le righe che cambieranno.
Che cosa puoi fare
- Attiva Distingui maiuscole: quello che trovi è allora esattamente quello che verrà sostituito, e l’avviso scompare.
- Oppure fai più passaggi, uno per ogni forma scritta (foo, Foo, FOO).
Parole chiave: maiuscole, minuscole, collation, differenza, avviso, sensibile
Si cerca in tutte le colonne di testo, ma alcune non si possono scrivere; Calíope dice quali e perché.
La ricerca copre tutte le colonne di testo: testo breve e lungo, elenchi chiusi e documenti JSON.
La sostituzione non viene offerta in quattro casi, e la colonna porta allora un lucchetto con il suo motivo:
Motivo
Perché
Il server calcola la colonna
Il suo valore deriva da altre colonne; scriverlo non ha effetto
Accetta solo valori di un elenco chiuso
Una sostituzione può uscire dall’elenco, e alcuni server lo trasformano in testo vuoto senza avvisare
Fa parte della chiave primaria
Cambiarla può rompere le relazioni con altre tabelle
Ha un indice univoco
Il nuovo valore può entrare in conflitto con uno esistente
Le tabelle senza chiave primaria non vengono sostituite, e lo si dice nella finestra di conferma. Senza chiave non c’è modo di identificare ogni riga, e una scrittura troppo ampia toccherebbe record che nessuno ha visto.
Le viste restano fuori. Alcune accettano scritture, ma capire quali richiede di analizzarne la definizione, e il rischio non vale la pena.
La sostituzione passa sempre da un’anteprima calcolata dal server, e puoi portarti il SQL nell’editor invece di eseguirlo.
Una sostituzione globale è una scrittura di massa su dati che non hai visto uno per uno. Per questo non si può avviare senza passare dalla finestra di controllo.
Che cosa vedi prima che venga scritto qualcosa
1. Quali tabelle e colonne verranno toccate, e quante righe ciascuna.
2. L’anteprima prima → dopo, riga per riga.
3. Gli avvisi che si applicano: la differenza fra il trovato e il sostituibile, le colonne bloccate e le chiavi esterne che dipendono da ciò che stai per cambiare.
L’anteprima la calcola il server, con la stessa operazione che eseguirà la scrittura. Non è una simulazione: quello che vedi è letteralmente ciò che verrà salvato, comprese le troncature per lunghezza massima che altrimenti scopriresti troppo tardi.
Vedi lo script ti dà il SQL completo da copiare ed eseguire tu, o da conservare. Quel pulsante non scrive nulla.
Altri due freni
- Oltre le mille righe bisogna digitare il numero per confermare.
- Ogni tabella viene scritta nella propria transazione, e alla fine le righe cambiate si confrontano con quelle annunciate. Se non tornano, viene detto.
Non c’è annulla. Se stai per toccare dati che contano, fai prima un backup dallo strumento Backup.
Parole chiave: sostituire, anteprima, confermare, script, sql, transazione, annullare, backup