Questa pagina descrive Calíope 1.5, la versione che sto costruendo adesso. La 1.4 è sull'App Store per Mac, iPad, iPhone, Apple Watch, Apple TV e Apple Vision Pro. 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.

Migrazione dati

Migrare oggetti tra server

Copia tabelle, viste, routine, trigger ed eventi su un altro server, o in un altro database dello stesso.

Dove si trova: Workspace › Strumenti › Migrazione dati

Apri Migrazione dati dalla barra laterale del workspace. Copia tabelle, viste, routine, trigger ed eventi da questa connessione a un altro server, o a un altro database dello stesso.

Scegli cosa copiare nell’albero a sinistra. La sua intestazione ha un filtro per nome: digita parte del nome di un database o di un oggetto per restringere l’elenco senza espandere un database alla volta. Gli oggetti sono raggruppati per tipo (Tabelle, Viste, Routine, Trigger ed Eventi); fare clic su un oggetto lo seleziona, e la casella di ogni database seleziona o deseleziona tutto il suo contenuto, con accanto il numero di oggetti selezionati sul totale. Svuota svuota la selezione. L’ordine lo stabilisce Calíope — tabelle, viste, routine, trigger ed eventi — così ogni oggetto trova già creato ciò da cui dipende.

Scegli dove va. Accanto a Destinazione:, apri Seleziona server di destinazione, scegli una delle connessioni salvate nel Gestore connessioni e premi Connetti. In Nel database, scrivi il database in cui finiranno gli oggetti; vuoto, ogni oggetto mantiene il database che ha nell’origine. Calíope crea quel database se non esiste, e riscrive i riferimenti di una vista perché legga da lì.

Opzioni: Sostituisci nella destinazione elimina tutto ciò che è selezionato prima di creare qualsiasi cosa —prima ciò che dipende dalle tabelle, e le tabelle figlie prima delle madri—, quindi ripetere la stessa migrazione è sicuro; Esporta dati copia le righe di ogni tabella; Salta i controlli FK disattiva il controllo delle chiavi esterne mentre si carica ogni oggetto, così le tabelle possono arrivare in qualsiasi ordine.

Premi Migra. Il registro dà una riga per oggetto, con il database in cui è andato e, per una tabella, le righe copiate. Ferma si arresta tra un oggetto e il successivo.

Le chiavi esterne delle tabelle copiate si creano alla fine, quando ci sono tutte con le loro righe: l'ordine in cui arrivano non conta più.

Tra famiglie di motori diverse un avviso accanto a Migra lo dice prima di eseguire qualsiasi cosa: il DDL di un motore l'altro non lo capisce, quindi non si crea nulla. Si copiano solo righe, in tabelle con lo stesso nome che esistono già nella destinazione, abbinando le colonne per nome; una tabella che la destinazione non ha, o un oggetto che non è una tabella, si salta e il registro lo dice.

SQL Server

Una colonna IDENTITY conserva i suoi valori (Calíope accende IDENTITY_INSERT durante la copia), ma non il suo contatore: nella destinazione la riga successiva riparte dal valore più alto copiato. Ogni oggetto finisce nel suo schema, che viene creato se non esiste. Con solo il nome di un database in Nel database, ogni oggetto conserva il suo schema: demo.dbo va in copia.dbo, e demo.rrhh in copia.rrhh.

PostgreSQL

Qui un database è uno schema del database connesso: Nel database indica lo schema in cui vanno gli oggetti, e viene creato se non esiste. I tipi usati dalle tabelle copiate —un ENUM, un dominio— si creano prima; uno che esiste già nella destinazione si conserva così com’è, perché rifarlo obbligherebbe a eliminare ogni colonna che lo usa. Il search_path di una funzione copiata punta allo schema di destinazione, quindi i suoi trigger scrivono lì e non nell’origine.

> Se la destinazione è lo stesso server dell’origine e un oggetto finirebbe nel suo stesso database, Migra resta disattivato e un avviso spiega perché: con Sostituisci nella destinazione, la copia eliminerebbe l’originale prima di leggerne le righe.

> Se il server che ti serve non compare nel selettore, aggiungilo prima nel Gestore connessioni e riapri Migrazione dati.

Parole chiave: migrare, migration, copiare, spostare, server di destinazione, connessione di destinazione, selettore

Anteprima del SQL di migrazione

Rivedi il SQL che verrebbe eseguito prima di migrare.

Dove si trova: Migrazione dati › Anteprima

Seleziona Anteprima e il pulsante diventa Genera SQL: invece di eseguire qualcosa, Calíope scrive nel pannello di output il SQL che la migrazione eseguirebbe, così puoi rivederlo o copiarlo. È lo stesso script che esegue la migrazione: CREATE DATABASE IF NOT EXISTS, il passaggio a quel database, le chiavi esterne disattivate con Salta i controlli FK, con Sostituisci nella destinazione, prima il DROP di tutto ciò che è selezionato —ciò che dipende dalle tabelle, poi le tabelle figlie prima delle madri—, poi ogni oggetto, e gli INSERT con Esporta dati. Le routine e i trigger stanno tra DELIMITER // e DELIMITER ;, quindi lo script si esegue anche così com’è nell’Editor SQL con Esegui script. In modalità Anteprima non serve connettere la destinazione.

Le chiavi esterne vanno alla fine, dopo tutte le tabelle e le loro righe.

SQL Server

In SQL Server lo script crea il database e lo schema se mancano (IF DB_ID(…) IS NULL), non ha DELIMITER —ogni routine va nel suo EXEC— e le righe con valore di identità vanno tra SET IDENTITY_INSERT … ON e OFF.

PostgreSQL

In PostgreSQL lo script crea lo schema se manca (CREATE SCHEMA IF NOT EXISTS), disattiva le chiavi esterne con SET session_replication_role, crea prima delle tabelle i tipi che usano, e non ha DELIMITER: il corpo di una funzione sta tra virgolette $function$.

Parole chiave: preview, anteprima, SQL preview, rivedere prima di eseguire