Vai al contenuto

Database Migrations

Gestione delle migrazioni dello schema database tramite Liquibase.

Strumento di Migrazione

Il progetto utilizza Liquibase (non Flyway) per le migrazioni database. Le tabelle di tracking sono:

Tabella Descrizione
databasechangelog Log di tutte le migrazioni eseguite
databasechangeloglock Lock per prevenire esecuzioni concorrenti

Queste tabelle sono presenti sia in own_c_a662 (278 migrazioni) che in own_generale.

Stato Attuale Migrazioni

Database c_a662 (schema own_c_a662)

278 changeset eseguiti. Le migrazioni gestiscono:

  • Creazione tabelle vv_*, vf_*, vp_*
  • Aggiunta colonne per nuove funzionalita
  • Creazione indici e vincoli
  • Inserimento dati di lookup nelle tabelle vf_*
  • Aggiornamenti parametri in vp_*

Database generale (schema own_generale)

Migrazioni per le tabelle di configurazione globale vg_*.

Regole per Nuove Migrazioni

Non modificare migrazioni gia eseguite

Le migrazioni gia presenti in databasechangelog non devono MAI essere modificate. Il checksum MD5 cambierebbe causando un errore al prossimo avvio. Per correzioni, creare sempre una nuova migrazione.

Convenzioni

  • Formato file: XML Liquibase
  • Naming: Seguire la numerazione progressiva esistente
  • Author: Nome sviluppatore
  • Changeset ID: Univoco e descrittivo

Esempio Changeset

<changeSet id="add-column-vv-verbale-new-field" author="developer-name">
    <addColumn tableName="vv_verbale" schemaName="own_c_a662">
        <column name="new_field" type="varchar(50)">
            <constraints nullable="true"/>
        </column>
    </addColumn>
</changeSet>

Workflow

  1. Creare il changeset XML nel file di migrazione appropriato
  2. Testare in locale contro il database di sviluppo
  3. Verificare che databasechangelog registri il nuovo changeset
  4. Committare il file di migrazione nel branch
  5. La migrazione viene eseguita automaticamente al deploy dell'applicazione

Rollback

Liquibase supporta il rollback automatico per operazioni standard (addColumn, createTable). Per operazioni piu complesse, definire esplicitamente il rollback:

<changeSet id="example-with-rollback" author="developer-name">
    <addColumn tableName="vv_verbale" schemaName="own_c_a662">
        <column name="temp_field" type="integer"/>
    </addColumn>
    <rollback>
        <dropColumn tableName="vv_verbale" schemaName="own_c_a662" columnName="temp_field"/>
    </rollback>
</changeSet>