Dal tema della rivista alla pratica di progetto
Pagine di servizi e tecniche correlate all'articolo
Un upgrade di PostgreSQL senza downtime suona a prima vista come una promessa del mondo cloud. Nella realtà di un database ERP in produzione è piuttosto una disciplina: bisogna far interagire coerenza dei dati, comportamento delle interfacce, esecuzioni batch, reporting, autorizzazioni e processi operativi in modo che il vero cambio di versione non sia altro che un momento di commutazione controllato. Va detto che «senza downtime» raramente va inteso in senso assoluto. Nella pratica significa: nessuna interruzione percepibile per gli utenti, nessun rollback non pianificato, nessuna chiusura prolungata di ore — e soprattutto una via di ritorno che funzioni realmente.
Questo contributo inquadra i percorsi di upgrade tipici per PostgreSQL negli ambienti ERP — con Blue/Green, replica (fisica e logica) e un piano di rollback che non esista solo sulla carta. L’attenzione è volutamente sul funzionamento e sulle questioni decisionali: quale architettura è necessaria? Dove sono i rischi? Quali attività preliminari richiedono tempo? E come evitare che un upgrade fallisca per motivi collaterali come driver, catene di job o una sovranità dei dati poco chiara?
Perché i database ERP sono particolarmente critici durante gli upgrade
I sistemi ERP sono orientati all’OLTP (Online Transaction Processing), quindi ottimizzati per molte transazioni brevi: registrare documenti, movimentare magazzino, calcolare prezzi, contabilizzare pagamenti. Queste transazioni si basano su aspettative precise: la latenza deve essere stabile, i lock non devono degenerare e il sistema deve restare prevedibile durante i picchi di carico.
Un upgrade di PostgreSQL interviene proprio su questa stabilità — anche quando l’applicazione resta invariata. Tra le cause ci sono, per esempio:
- Modifiche nell’ottimizzatore di query (planner): le query possono improvvisamente scegliere piani di esecuzione diversi. Non è «sbagliato», ma sotto carico possono emergere nuovi punti caldi.
- Variazioni dei parametri e dei valori di default: i parametri di configurazione o il loro comportamento di default cambiano tra le major release. Ciò riguarda, ad esempio, l’autovacuum, il WAL (Write-Ahead Log, il registro delle transazioni) o le impostazioni di memoria di lavoro (work_mem).
- Problematiche di driver e protocollo: versioni di ODBC/JDBC/Npgsql, parametri SSL/TLS, autenticazione (ad es. SCRAM vs. MD5) e catene di certificati sono spesso blocker nascosti.
- Ecosistema di interfacce: ERP raramente significa «solo un’applicazione». Reporting, EDI, webservice, ETL/BI, gestione documentale ed integrazioni batch accedono al database — direttamente o indirettamente.
La conseguenza: un upgrade non è solo un cambiamento del database. È un rilascio coordinato tra applicazione, operation e sistemi adiacenti. Proprio per questo Blue/Green e la replica sono così preziosi: disaccoppiano la modifica tecnica dal rischio di una lunga finestra di manutenzione.
Definire chiaramente gli obiettivi: «senza downtime» non significa «senza commutazione»
Prima di scegliere un’architettura conviene definire obiettivi chiari in termini di metriche operative:
- RTO (Recovery Time Objective): quanto rapidamente il database ERP deve tornare stabile e raggiungibile dopo un guasto?
- RPO (Recovery Point Objective): quanti dati (in termini di finestra temporale) possono andare persi nel peggiore dei casi? Nelle migrazioni realmente a zero downtime l’obiettivo è spesso RPO≈0.
- Finestra di manutenzione: esiste una finestra «piccola» (p. es. pochi minuti) per un cutover, oppure nessuna? Nell’ERP una commutazione è in genere possibile se pianificata (evitando cambi turno, chiusure di fine mese ecc.).
Questi obiettivi determinano se potete lavorare con replica più cutover o se avete inoltre bisogno di meccanismi per il disaccoppiamento in scrittura (p. es. accodamento nelle interfacce). Chi resta vago su questo punto pagherà più tardi sotto forma di improvvisazione al Go-live.
Blue/Green per PostgreSQL: principio, vantaggi, ostacoli tipici
Blue/Green significa: esistono due ambienti completi in parallelo. „Blue“ è la produzione, „Green“ è la nuova versione. Il vantaggio decisivo non è solo la possibilità di commutare, ma la testabilità in condizioni realistiche: Green può essere verificato con dati prossimi alla produzione, interfacce reali e monitoraggio reale prima che gli utenti effettuino il passaggio.
Per PostgreSQL nel contesto ERP, Blue/Green comprende tipicamente:
- un cluster PostgreSQL separato (Green) su nuovi host/VM o su istanze separate
- parametri di rete e di sicurezza identici (firewall, TLS, risoluzione DNS, account di servizio)
- una presa dati definita (copia iniziale + delta)
- un meccanismo di cutover (commutazione DNS/VIP, cambio della stringa di connessione, proxy)
Cosa Blue/Green vi offre operativamente
In pratica sono tre punti che fanno la differenza:
- Il ripristino è rapido: si torna alla versione precedente in caso di errore, invece di tentare di riparare l’upgrade „a ritroso“.
- Riduzione del rischio tramite validazione preventiva: Green può eseguire controlli di performance e funzionalità, inclusi i carichi ERP tipici (esecuzioni batch, stampa, picchi di registrazioni).
- Separazione netta del rischio database e applicazione: quando Green è operativo, molte incognite sono già risolte (driver, autenticazione, estensioni, parametri).
I problemi più frequenti in Blue/Green
Blue/Green fallisce raramente per l’idea, ma per i dettagli:
- Dipendenze incomplete: strumenti di reporting o integrazioni accedono in modo hard‑coded al vecchio host (IP, alias, certificate pinning). Durante il cutover restano bloccati.
- Ownership delle interfacce non chiara: nessuno si sente responsabile che tutti i consumer effettuino la commutazione o vengano almeno testati.
- Mancanza di validazione dei dati: „i dati sono replicati“ non significa che tutto sia corretto dal punto di vista funzionale (p. es. sequenze/identità, timestamp, logica del subledger).
Replica come strumento di upgrade: fisica vs. logica
Per un upgrade di PostgreSQL senza downtime la replica è di norma il meccanismo centrale per mantenere i dati in parallelo. PostgreSQL offre diversi approcci con compromessi differenti. Importante: «replicazione» non è automaticamente «alta disponibilità». Per gli upgrade utilizzate la replica come ponte di migrazione.
Replica fisica (Streaming Replication): veloce, vicina alla macchina
La replica fisica opera a livello WAL: lo Standby riceve il registro delle transazioni e lo applica. È performante e stabile, ma presenta un vincolo centrale per i Major-Upgrades: di norma Primary e Standby devono corrispondere alla stessa Major-Version. Per un salto di versione, p.es. da PostgreSQL 13 a 16, la replica fisica è quindi utile piuttosto per operazioni all’interno della stessa versione (HA, manutenzione) e non come percorso diretto per un Major-Upgrade.
Un beneficio pratico nel progetto di upgrade sussiste comunque se si usa la replica fisica come rete di sicurezza nel sistema Blue: prima del Cutover potete assicurarvi che la produzione esistente sia ridondante, mentre costruite in parallelo il Green.
Replica logica: trasferimento dei delta tramite publication/subscription
La replica logica trasferisce le modifiche a livello di tabella (INSERT/UPDATE/DELETE) ed è quindi adatta ai Major-Upgrades, perché publisher e subscriber possono avere Major-Version diverse (nel rispetto della compatibilità reciproca). Per i database ERP spesso è il percorso più praticabile per ottenere una finestra di switch minima.
Caratteristiche tipiche da prevedere:
- Snapshot iniziale + modifiche continue: il contenuto dei dati viene copiato inizialmente e successivamente le modifiche vengono applicate.
- DDL non è replicato automaticamente: le modifiche allo schema (DDL, cioè tabelle/colonne/indici) non vengono replicate come le modifiche ai dati. Per gli upgrade questo è accettabile perché lo schema di solito resta invariato – ma le Extensions, i ruoli e i permessi devono essere migrati in modo consapevole.
- Aspetti di sequence/identity: le sequence (p.es. per numeri di documento) sono critiche negli ERP. A seconda del setup bisogna garantire che i valori delle sequence vengano trasferiti in modo consistente e che dopo il Cutover proseguano correttamente.
- Assenza di conflitti: durante la fase di replica la scrittura dovrebbe avvenire da un solo lato. Altrimenti si generano conflitti difficili da risolvere nell’esercizio ERP.
Il percorso di upgrade nella pratica: un modello di processo affidabile
Indipendentemente dallo strumento specifico, un upgrade con downtime minimizzato in ambienti ERP procede di solito in fasi chiare. Una struttura pratica è:
1) Analisi preliminare: cosa deve essere effettivamente migrato?
Qui non si tratta di „Installa PostgreSQL X“, ma di dipendenze:
- Estensioni (p.es. per full-text, job, tipi di dato speciali): quali sono attive in produzione, quali sono presenti a scopo storico?
- Auth e ruoli: ruoli locali, integrazione LDAP/AD, SCRAM, autenticazione tramite certificato. L’esportazione di ruoli e permessi è un passaggio di lavoro separato.
- Job e esecuzioni batch: lo scheduling avviene esternamente (p.es. tramite un jobserver) o nel database (p.es. tramite estensioni)? Quali job sono critici per il passaggio (elaborazione notturna, fatturazione, MRP)?
- Panorama dei consumer: chi legge/scrive? Backend ERP, portali web, servizi di integrazione, BI/ETL, collegamenti con partner, DMS, monitoring.
Un artefatto semplice ma efficace è una Application-Map: database al centro, frecce verso tutti i sistemi incl. proprietario e metodo di commutazione (DNS, configurazione, secret, proxy). Questo evita che il passaggio fallisca a causa di lettori “dimenticati” che improvvisamente vanno in timeout.
2) Green aufbauen: nicht nur Datenbank, sondern Betriebsfähigkeit
Green ha senso solo quando è “veramente operativo”. Ciò include:
- Monitoring (metriche, log, allarmi): stessa visibilità di Blue, altrimenti la messa in produzione è alla cieca.
- Backup/RESTore: i backup su Green devono funzionare, incluso il test di RESTore (almeno a campione). Solo così è chiaro che in caso di errore non si perde due volte.
- Parità di sicurezza: configurazione TLS, cipher, catena dei certificati, regole HBA (Host-Based Authentication), firewall. «Indurire più tardi» si rivela controproducente al momento della commutazione.
- Base di performance: latenza dello storage, IOPS, CPU, RAM. Un upgrade è un buon momento per correggere classi di storage inadeguate o profili VM obsoleti.
3) Datenübernahme: initiale Kopie und Delta-Phase
Per grandi database ERP la copia iniziale è spesso il passo più lungo. Non deve necessariamente avvenire nella finestra di manutenzione se la disaccoppiate correttamente. Decisivo è che la fase delta (replicazione) funzioni in modo stabile e sia monitorata: lag, errori, modifiche in sospeso.
Operativamente importante: definite soglie a partire dalle quali avviate il passaggio. Se Green RESTa costantemente indietro, lo switch è possibile, ma trasferite il problema nel sistema di produzione.
4) Validierung: fachlich und technisch, ohne Perfektionismus
La validazione non è un progetto di test di mesi, ma è più di «SELECT COUNT(*)». In ambienti ERP i seguenti controlli funzionano bene:
- Controlli a campione su tabelle critiche: poste aperte, giacenze, testate/posizioni documenti, tabelle di determinazione prezzi, debitore/creditore.
- Confronti aggregati: somme su periodi definiti (fatturato, quantità) per individuare rapidamente divergenze grossolane.
- Indicatori tecnici: stato di indici e statistiche, attività di autovacuum, replication lag, limiti di connessione, latenze delle query.
Importante è decidere cosa serve realmente per l’accettazione. Un upgrade non è un rilascio funzionale. Volete dimostrare: stessi dati, stesso comportamento, performance stabili. A questo servono punti di verifica affidabili e riproducibili.
5) Cutover: der Umschaltmoment muss wie ein Runbook funktionieren
Il cutover in sé raramente è complesso, ma è critico nei tempi. Un buon runbook non descrive solo i passaggi, ma anche i punti di verifica e i criteri di interruzione. Elementi tipici:
- Controllare lo stop delle scritture: o tramite la modalità di manutenzione dell’applicazione o tramite un blocco tecnico (p.es. chiudere le connessioni per i ruoli di scrittura). Obiettivo: nessuna nuova scrittura su Blue nell’ultima fase.
- Portare la replicazione a «zero»: attendere che Green abbia tutte le modifiche (RPO≈0).
- Commutazione dell’applicazione: stringhe di connessione, DNS, VIP, regola del proxy. Cruciale: coerente per tutti i componenti, non solo per il backend ERP.
- Smoke test: login, apertura dei dati anagrafici, registrazione di un documento, report tipico, ping delle interfacce. Breve, ma significativo.
Piano di ricaduta (Rollback) senza illusioni: cosa potete davvero riportare indietro
Il piano di ricaduta è la parte che si preferirebbe „non dover usare“. Proprio per questo deve essere concreto. Nelle configurazioni Blue/Green la ricaduta consiste fondamentalmente nel commutare di nuovo su Blue. Ma: non appena dopo il cutover avvengono scritture produttive su Green, tornare indietro diventa un problema funzionale se nel frattempo Blue non ha ricevuto anch’esso tutte le scritture.
Varianti di rollback e loro conseguenze
- Rollback immediato prima di scritture produttive: caso ideale. Se prima di dare accesso agli utenti rilevate che qualcosa non va a livello fondamentale, potete commutare indietro senza conflitti sui dati.
- Rollback dopo poche scritture: possibile, ma solo con una strategia chiara: o riconciliare manualmente le registrazioni a posteriori (a livello funzionale) oppure una contro-replicazione temporanea/assorbimento del delta (a livello tecnico), cosa che nei processi ERP raramente avviene senza complicazioni.
- Non un rollback, ma un „Fix forward“: se Green scrive già in produzione e lo stato dei dati lì è la nuova „Single Source of Truth“, tornare indietro è spesso più rischioso che procedere con una stabilizzazione mirata in avanti. Questo deve essere accettato a priori come opzione.
Un piano di ricaduta solido specifica quindi esplicitamente:
- fino a quando il rollback è „sicuro“ (finestra temporale o fase nel runbook)
- quali criteri di interruzione si applicano (es. fallimento del smoke test, errori delle interfacce, somme non plausibili)
- come avvengono comunicazione e autorizzazioni (chi decide, chi viene informato)
Più importante del rollback: il „Notbetrieb“ per le interfacce
Nelle architetture ERP le interfacce sono la causa più frequente di situazioni frenetiche dopo un cutover. Se i collegamenti con partner o i servizi di integrazione interni smettono improvvisamente di consegnare, serve un funzionamento di emergenza: buffer intermedi (Queues), regole di riavvio, chiare strategie di retry. Il „retry“ deve essere idempotente (ripetibile senza doppia contabilizzazione). Non si tratta di una funzione del database, ma di design dell’applicazione e dell’integrazione — tuttavia determina se riuscirete davvero a eseguire un upgrade senza interruzioni.
Performance e stabilità dopo l’upgrade: perché le prime 48 ore sono decisive
Molti team considerano l’upgrade „concluso“ non appena il cutover è avvenuto. In pratica inizia allora la fase in cui si stabilizzano profili di carico, comportamento della cache e autovacuum. Misure tipiche che si sono dimostrate efficaci:
- Monitoraggio serrato nelle prime 48 ore: latenze delle query, lock, tempi di attesa I/O, volume WAL, esecuzioni di autovacuum.
- Rilevare regressioni del piano: singole query che prima erano “ok” possono, dopo l’upgrade, dominare il carico. Qui aiutano liste Top-Query e una chiara escalation su chi può effettuare il tuning (DBA vs. team applicativo).
- Monitorare separatamente Reporting/ETL: strumenti a prevalente carico di lettura sono spesso i primi a dare problemi (query lunghe, piani nuovi). Le repliche di sola lettura possono aiutare, ma devono inserirsi nel concetto complessivo.
Per la direzione IT è importante: pianificate questa stabilizzazione come parte del Change. Un upgrade senza downtime non è “nessun lavoro”, è lavoro al momento giusto e con rischio controllato.
Decisioni architetturali tipiche attorno all’ERP: DNS, connection string, proxy
Il cutover sarà tanto più pulito quanto più univoco è il punto di commutazione. Varianti frequenti:
- Alias DNS (ad esempio db-erp.prod): semplice, ma TTL (Time To Live) e caching lato client possono estendere i tempi di commutazione. Per alcuni driver il caching DNS è sorprendentemente tenace.
- IP virtuale / Load Balancer: lo switch è tecnicamente rapido, ma serve un chiaro concetto di health check, altrimenti si può instradare verso stati instabili.
- Connection string tramite configurazione/secret: ben controllabile se disponete di una distribuzione centrale delle configurazioni. Rischio: non tutte le componenti caricano la nuova configurazione simultaneamente.
- DB-Proxy: può aiutare a centralizzare lo switch, ma aggiunge complessità e introduce un nuovo servizio critico nella catena.
Per software aziendale cresciuto nel tempo è spesso realistico un mix: servizi centrali commutano via configurazione, “componenti legacy” via DNS. È importante mapparlo nel Runbook e testarlo – inclusi i job “dimenticati” su un vecchio server applicativo.
Sicurezza e compliance: l’upgrade come opportunità, non come campo di battaglia parallelo
Gli aggiornamenti di PostgreSQL sono un buon pretesto per chiudere falle di sicurezza: metodi di autenticazione obsoleti, ruoli troppo ampi, permessi di rete poco chiari. Allo stesso tempo la security non deve trasformarsi in uno scope creep incontrollato.
Approccio pragmatico:
- Parità di sicurezza al Cutover: Green deve essere almeno sicuro quanto Blue, idealmente con piccole e chiare migliorie (es. default TLS, SCRAM invece di MD5, regole HBA più RESTrittive).
- Rifacimenti più ampi a seguire: refactoring dei ruoli, segmentazione di rete rigorosa o rotazione completa dei secret sono operazioni preziose, ma meglio trattarle come pacchetti di Change separati dopo la stabilizzazione.
Stimare realisticamente il lavoro: dove i progetti perdono tempo nella pratica
Per pianificazione e comunicazione aiuta una struttura del lavoro onesta. Per esperienza i consumatori di tempo non sono “installare PostgreSQL”, ma:
- Inventario dei consumer: individuare tutti i lettori/scrittori, chiarire gli owner, definire la via di commutazione.
- Dati di test e ambiente di test: dati rappresentativi della produzione (nel rispetto della protezione dei dati) e carico realistico sono decisivi, altrimenti si testa il problema sbagliato.
- Runbook e autorizzazioni: chi può fare cosa nella finestra di manutenzione? Chi decide il rollback? Chi comunica? Senza chiarezza nascono ritardi nel momento critico.
- Temi driver/TLS: piccole incompatibilità possono generare grandi sintomi (disconnessioni sporadiche, errori di autenticazione, timeout).
Se trattate questi punti fin dall’inizio come pacchetti di lavoro propri, l’“upgrade” diventa un progetto governabile invece di un weekend nervoso.
Conclusione: un upgrade di PostgreSQL senza interruzioni di servizio è prima di tutto una progettazione operativa
Un upgrade di PostgreSQL senza interruzioni di servizio non si ottiene con un singolo trucco, ma con un’architettura che renda gestibili la commutazione e il rollback. Blue/Green crea la separazione necessaria, la replica fornisce il ponte dati e un piano di rollback realistico evita che il team, in caso di errore, debba scegliere tra perdita di dati e ore di interruzione.
Se inventariate con precisione il panorama dei consumer, costruite Green come ambiente operativo (monitoring, backup, security), monitorate la migrazione dei dati e provate il Cutover come runbook con criteri di interruzione, il salto di versione diventerà un change controllato – anche per database ERP in produzione con molte interfacce.
Se desiderate preparare in modo strutturato l’upgrade del vostro database ERP e valutare insieme architettura, interfacce e piano di rollback, parlate con noi:
Per questo argomento sono rilevanti anche Blue/Green Deployment e Cutover-Plan. L’articolo inquadra questi aspetti in modo comprensibile e mostra cosa conta nella pratica.
Discutere il progetto o l’iniziativa di modernizzazione con Net-Base.
Passo successivo
Quando un tema diventa un progetto reale, architettura, sistemi esistenti e gestione operativa dovrebbero essere considerati insieme fin dalle fasi iniziali.
Non forniamo solo supporto per questioni isolate, ma anche quando da frammenti di codice sorgente, tematiche legacy o idee di portale deve nascere un progetto aziendale solido.
- Stato attuale, stato obiettivo e rischi tecnici vengono valutati insieme.
- REST, l'accesso ai dati, i portali e il rollout non vengono rinviati a fasi successive.
- Vede in anticipo quale percorso è economicamente e operativamente sostenibile.