Integrare Spanner con Liquibase

Questa pagina descrive come gestire le modifiche allo schema del database Spanner con Liquibase per i database con dialetto GoogleSQL e PostgreSQL.

Liquibase è una libreria open source indipendente dal database per il monitoraggio, la gestione e l'applicazione delle modifiche allo schema del database. Supporta SQL e formati dichiarativi come XML, YAML e JSON.

Liquibase può essere indirizzato ai database Spanner. Supporta tutte le funzionalità di Spanner, con alcune limitazioni.

  • Per visualizzare le limitazioni generali, vedi Limitazioni.
  • Per visualizzare informazioni aggiuntive per i database con dialetto PostgreSQL, come i requisiti di Liquibase, i tipi di modifiche supportati e le limitazioni, consulta PGAdapter e Liquibase.

Installa Liquibase

Per utilizzare Liquibase con i database con dialetto GoogleSQL, devi installare l'estensione Spanner Liquibase. Per i database con dialetto PostgreSQL, Liquibase può utilizzare il supporto PostgreSQL integrato insieme a PGAdapter.

GoogleSQL

  1. Segui le istruzioni nella documentazione di Liquibase per installare e configurare Liquibase e per creare uno snapshot del database.

  2. Vai alla pagina delle release dell'estensione Spanner Liquibase su GitHub e seleziona l'ultima release.

  3. Seleziona e scarica il file JAR con il nome liquibase-spanner-x.y.z-all.jar, dove x.y.z rappresenta il numero di versione dell'estensione. Ad esempio, liquibase-spanner-4.17.0-all.jar.

  4. Inserisci il file JAR scaricato nella directory lib di Liquibase. Il file JAR include l'estensione, l'SDK Spanner e il driver JDBC di Spanner.

Nel file di configurazione liquibase.properties, imposta la proprietà url come segue.

 jdbc:cloudspanner:/projects/PROJECT/instances/INSTANCE/databases/DATABASE
 

Il file di configurazione liquibase.properties può contenere solo questa proprietà. Le altre proprietà sono facoltative.

PostgreSQL

  1. Assicurati che PGAdapter sia avviato e in esecuzione sulla macchina in cui installi Liquibase. Per saperne di più, consulta Avvia PGAdapter.

  2. Segui le istruzioni nella documentazione di Liquibase per installare e configurare Liquibase e per creare uno snapshot del database.

Nel file di configurazione liquibase.properties, imposta la proprietà url come segue.

  jdbc:postgresql://localhost:5432/DATABASE_NAME?options=-c%20spanner.ddl_transaction_mode=AutocommitExplicitTransaction
  

Il file di configurazione liquibase.properties può contenere solo questa proprietà. Le altre proprietà sono facoltative.

La stringa url deve includere options=-c%20spanner.ddl_transaction_mode=AutocommitExplicitTransaction perché Spanner non supporta le transazioni DDL e questo garantisce che le transazioni DDL vengano convertite in batch DDL. Per saperne di più, consulta Opzioni DDL per PGAdapter.

Esamina gli esempi di Liquibase

GoogleSQL

Il file di log delle modifiche di esempio changelog.yaml incluso nell'estensione Liquibase GoogleSQL mostra molte delle funzionalità di Liquibase e come utilizzarle con Spanner.

PostgreSQL

Il file di log delle modifiche di esempio dbchangelog.xml disponibile nel repository GitHub di PGAdapter e Liquibase mostra molte delle funzionalità di Liquibase e come utilizzarle con Spanner.

Guida rapida di Liquibase

Questa guida rapida mostra come utilizzare Liquibase per aggiungere una tabella Singers a un database.

Prima di iniziare

  • Assicurati di aver completato i passaggi precedenti per installare Liquibase.

  • Crea un'istanza di Spanner.

  • Crea un database con dialetto GoogleSQL o PostgreSQL.

  • Solo per i database con dialetto PostgreSQL, assicurati che PGAdapter sia avviato e in esecuzione sulla stessa macchina dell'installazione di Liquibase. Per ulteriori informazioni, consulta Avvia PGAdapter.

  • Solo per i database con dialetto PostgreSQL, utilizza lo script create_database_change_log.sql per creare le tabelle di metadati databasechangeloglock e databasechangelog. Devi creare queste tabelle per sostituire quelle che Liquibase crea automaticamente nel tuo database. per garantire che in queste tabelle vengano utilizzati i tipi di dati PostgreSQL corretti per Spanner.

    Puoi eseguire lo script con il seguente comando:

    psql -h localhost -d DATABASE_NAME -f create_database_change_log.sql
    
  • Concedi all'estensione Spanner Liquibase l'utilizzo temporaneo delle tue credenziali utente Spanner per l'accesso API eseguendo il seguente comando gcloud:

    gcloud auth application-default login
    

Crea un file changelog.yaml

  1. Inserisci il seguente codice YAML nel tuo editor preferito.

    databaseChangeLog:
      - preConditions:
         onFail: HALT
         onError: HALT
    
      - changeSet:
         id: create-singers-table
         author: spanner-examples
         changes:
           - createTable:
              tableName: Singers
              columns:
                -  column:
                    name:    SingerId
                    type:    BIGINT
                    constraints:
                      primaryKey: true
                      primaryKeyName: pk_Singers
                -  column:
                    name:    Name
                    type:    VARCHAR(255)
    

    Questo file YAML definisce una tabella chiamata Singers con una chiave primaria SingerId e una colonna chiamata Name per memorizzare il nome del cantante.

    Per i database con dialetto PostgreSQL, consigliamo di utilizzare tutte le lettere minuscole per i nomi di tabelle e colonne. Per ulteriori informazioni, consulta la sezione Sensibilità alle maiuscole e minuscole di PostgreSQL.

    Tieni presente che il set di modifiche createTable deve includere un vincolo di chiave primaria e il nome del vincolo di chiave primaria deve essere pk_table_name.

  2. Salva le modifiche come changelog.yaml.

Esegui Liquibase

Applica il changeset in changelog.yaml eseguendo il seguente comando:

liquibase --changeLogFile changelog.yaml update

Liquibase utilizza l'URL definito nel file liquibase.properties. Puoi sovrascrivere il valore nel file aggiungendo il seguente argomento al comando precedente:

--url URL

Verificare le modifiche

Gli aggiornamenti del passaggio precedente hanno comportato l'aggiunta della tabella Singer al tuo database. Inoltre, sono state aggiunte (database con dialetto GoogleSQL) o aggiornate (database con dialetto PostgreSQL) le tabelle DATABASECHANGELOG e DATABASECHANGELOGLOCK.

Puoi verificare l'esistenza di queste tabelle tramite la console Google Cloud o gcloud CLI. Ad esempio, l'esecuzione della query SQL SELECT * FROM INFORMATION_SCHEMA.TABLES restituisce un elenco di tutte le tabelle del database.

gcloud spanner databases execute-sql DATABASE_NAME --instance=INSTANCE \
    --sql='SELECT * FROM INFORMATION_SCHEMA.TABLES'

Puoi visualizzare un registro delle modifiche applicate eseguendo una query sui contenuti di DATABASECHANGELOG.

Passaggi successivi