Piano di migrazione del database senza downtime (expand and contract)
Pianifica una modifica di schema in produzione senza interruzioni: fasi expand, migrazione e contract, backfill a lotti, query di verifica e rollback per ogni passaggio. Pensato per ChatGPT, Claude, Gemini e Microsoft Copilot. Include 5 variabili personalizzabili e puoi copiarlo gratuitamente con un clic.
Avanzato · Codice · In attesa di revisione editoriale
Prompt
Agisci come ingegnere di database esperto di migrazioni in produzione senza interruzione del servizio.
La modifica che voglio fare: {{modifica}}
- Motore e versione: {{motore}}
- Dimensione delle tabelle coinvolte e carico: {{volume}}
- Come viene rilasciata l’applicazione: {{rilascio}}
- Strumento di migrazione: {{strumento}}
Consegna:
1. Analisi dei rischi: quali istruzioni bloccano o riscrivono la tabella con questo motore e questa versione, e per quanto potrebbero bloccarla con questi volumi (in modo qualitativo se mancano dati).
2. Un piano a fasi con il pattern expand and contract. Per ogni fase: SQL esatto, modifiche al codice applicativo, in quale rilascio va e condizione per passare alla successiva.
- Expand: aggiungere colonne, tabelle o indici senza rompere la versione precedente del codice (niente lock lunghi, indici concorrenti se il motore li supporta).
- Doppia scrittura o sincronizzazione temporanea tra vecchia e nuova struttura.
- Backfill a lotti: script idempotente e riprendibile, dimensione dei lotti, pause e misura dell’avanzamento.
- Spostamento delle letture sulla nuova struttura.
- Contract: eliminare la vecchia struttura solo quando nulla la usa più.
3. Query di verifica che confermino la corrispondenza tra dati vecchi e nuovi.
4. Un piano di rollback per ogni fase e il punto oltre il quale tornare indietro non è più banale.
5. Cosa monitorare durante la migrazione (lock, ritardo di replica, latenza, errori) e quando fermarsi.
6. Una checklist finale per il giorno del cambio.
Vincoli:
- Considera che per qualche minuto conviveranno due versioni del codice, salvo diversa indicazione.
- Non inventare nomi di tabelle o colonne: usa i miei o [DA COMPLETARE].
- Se manca un’informazione critica (per esempio repliche o chiavi esterne), chiedimela prima.
- Consiglia di provare l’intero piano in staging con una copia realistica dei dati.Come usarlo
- Descrivi la modifica con i nomi reali di tabelle e colonne.
- Indica come rilasci (rolling, blue-green, istanza singola) e quale strumento di migrazione usi.
- Prova ogni fase in staging prima di toccare la produzione.
- Allega il piano al ticket del cambio per avere il rollback a portata di mano.
Esempio d'uso
Modifica: dividere clienti.nome_completo in nome e cognome · PostgreSQL 15 · 8 milioni di righe · Rilascio rolling su Kubernetes · Alembic.
Esempio di risultato
1. Rischio
In PostgreSQL 15, ADD COLUMN senza default tocca solo il catalogo, ma richiede un breve lock ACCESS EXCLUSIVE: se davanti c’è una query lunga, tutte le scritture si accodano. Per questo impostiamo lock_timeout.
2. Piano a fasi
| Fase | Rilascio | Si prosegue quando… |
|---|---|---|
| Espansione | N | Colonne create senza errori |
| Doppia scrittura | N+1 | Tutte e 4 le repliche scrivono entrambe le strutture |
| Backfill | Script | 0 righe rimaste |
| Lettura nuova | N+2 | Query di verifica a 0 |
| Contrazione | N+3 | Nessun codice legge nome_completo |
-- Fase 1: espansione (fallire subito invece di bloccare la tabella)
SET lock_timeout = '2s';
ALTER TABLE clienti
ADD COLUMN nome text,
ADD COLUMN cognome text;
-- Fase 3: backfill a lotti, idempotente e riprendibile per id
UPDATE clienti
SET nome = split_part(nome_completo, ' ', 1),
cognome = NULLIF(substr(nome_completo,
length(split_part(nome_completo, ' ', 1)) + 2), '')
WHERE id > :ultimo_id AND id <= :ultimo_id + 5000
AND nome IS NULL;
Attenzione: la regola di divisione è [DA COMPLETARE]. Tagliare al primo spazio sbaglia con nomi doppi («Gian Luca») o cognomi come «De Luca»; controlla un campione prima del backfill…
Dati chiave
- Categoria
- Programmazione e sviluppo · SQL
- Tipo di output
- Codice
- Livello
- Avanzato
- Pensato per
- ChatGPT, Claude, Gemini e Microsoft Copilot
- Verificato in
- In attesa di verifica editoriale
- Variabili
- Modifica di schema, Motore e versione, Volumi e carico, Modalità di rilascio e Strumento di migrazione
- Lingua
- Italiano
- Prezzo
- Gratuito, senza registrazione
- Aggiornato
- 07/11/2026
Domande frequenti
Che cos’è il pattern expand and contract?
Trasforma una modifica incompatibile in più passaggi compatibili: aggiungi il nuovo senza togliere il vecchio, migri dati e letture e solo alla fine elimini il vecchio. Ogni rilascio resta compatibile con la versione precedente del codice.
Perché il backfill a lotti e non un unico UPDATE?
Un UPDATE massivo può tenere lock a lungo, generare molti log e far restare indietro le repliche. Lotti piccoli e riprendibili riducono l’impatto e permettono di fermarsi se qualcosa va storto.
A cosa serve questo prompt?
Pianifica una modifica di schema in produzione senza interruzioni: fasi expand, migrazione e contract, backfill a lotti, query di verifica e rollback per ogni passaggio.
Con quali strumenti di IA funziona?
È pensato per ChatGPT, Claude, Gemini e Microsoft Copilot. Non lo abbiamo ancora verificato in questi strumenti, quindi i risultati possono variare da uno all'altro.
Come personalizzo il prompt?
Clicca su «Personalizza» e compila le variabili (Modifica di schema, Motore e versione, Volumi e carico, Modalità di rilascio e Strumento di migrazione). Il testo si aggiorna all'istante e poi puoi copiarlo con un clic. I valori vengono salvati solo nel tuo browser.
Serve esperienza per usarlo?
È di livello avanzato: è pensato per persone con esperienza nell'argomento, in grado di valutare e regolare il risultato.
Questo prompt è gratuito?
Sì. Tutti i prompt di HomeCasa Prompts sono gratuiti, senza registrazione né abbonamento. Puoi usarli anche in progetti professionali.
Posso fidarmi dell'output dell'IA?
Consideralo una bozza di alta qualità: verifica sempre dati, cifre e affermazioni importanti prima di pubblicare o prendere decisioni.