Ecco qualcosa che faccio. Non comporta zero tempi di inattività, ma potrebbe terminare in meno di un secondo.
Crea un database che abbia solo elementi di interfaccia con il tuo database reale. Nel mio caso, contiene solo definizioni di visualizzazione e tutte le query degli utenti passano attraverso questo database.
Crea un nuovo database ogni notte. Al termine, aggiorna le definizioni della vista per fare riferimento al nuovo database. Consiglierei di disattivare l'accesso degli utenti al database contenente le viste mentre le aggiorni o di eliminare tutte le viste e ricrearle:ciò impedisce l'accesso parziale al vecchio database. Poiché la creazione di viste è veloce, questa dovrebbe essere un'operazione molto veloce.
Facciamo tutto questo attraverso un lavoro. Infatti, prima di modificare le viste di produzione, testiamo la creazione delle viste su un altro database per assicurarci che funzionino tutte.
Ovviamente, se usi alter view
invece di richiedere coerenza in tutte le viste, non ci sono tempi di inattività, solo un breve periodo di incoerenza.