Spanner in Liquibase einbinden

Auf dieser Seite wird beschrieben, wie Sie Änderungen am Spanner-Datenbankschema mit Liquibase für Datenbanken mit Google SQL- und PostgreSQL-Dialekt verwalten.

Liquibase ist eine Open-Source-Datenbank-unabhängige Bibliothek zum Nachverfolgen, Verwalten und Anwenden von Datenbankschemaänderungen. Es unterstützt sowohl SQL als auch deklarative Formate wie XML, YAML und JSON.

Liquibase kann auf Spanner-Datenbanken ausgerichtet werden. Es unterstützt alle Spanner-Funktionen, mit einigen Einschränkungen.

  • Allgemeine Einschränkungen finden Sie unter Einschränkungen.
  • Weitere Informationen zu Datenbanken mit PostgreSQL-Dialekt, z. B. Liquibase-Anforderungen, unterstützte Änderungstypen und Einschränkungen, finden Sie unter PGAdapter und Liquibase.

Liquibase installieren

Wenn Sie Liquibase mit Datenbanken im GoogleSQL-Dialekt verwenden möchten, müssen Sie die Spanner Liquibase-Erweiterung installieren. Für Datenbanken mit PostgreSQL-Dialekt kann Liquibase die integrierte PostgreSQL-Unterstützung in Verbindung mit PGAdapter verwenden.

  1. Folgen Sie der Anleitung in der Liquibase-Dokumentation, um Liquibase zu installieren und zu konfigurieren und einen Snapshot Ihrer Datenbank zu erstellen. Legen Sie in der Konfigurationsdatei liquibase.properties das Attribut url so fest:
 jdbc:cloudspanner:/projects/PROJECT/instances/INSTANCE/databases/DATABASE
 
Your `liquibase.properties` configuration file can contain only this
property. Other properties are optional.
  1. Rufen Sie auf GitHub die Releaseseite für die Liquibase-Erweiterung für Spanner auf und wählen Sie neuesten Release aus.

  2. Wählen Sie die JAR-Datei mit dem Namen liquibase-spanner-x.y.z-all.jar aus und laden Sie sie herunter. Dabei steht x.y.z für die Versionsnummer der Erweiterung. Beispiel: liquibase-spanner-4.17.0-all.jar.

  3. Platzieren Sie die heruntergeladene JAR-Datei im lib-Verzeichnis von Liquibase. Die JAR-Datei enthält die Erweiterung, das Spanner SDK und den Spanner JDBC-Treiber.

  1. PGAdapter muss auf dem Computer gestartet und ausgeführt werden, auf dem Sie Liquibase installieren. Weitere Informationen finden Sie unter PGAdapter starten.

  2. Folgen Sie der Anleitung in der Liquibase-Dokumentation, um Liquibase zu installieren und zu konfigurieren und einen Snapshot Ihrer Datenbank zu erstellen.

Legen Sie in der Konfigurationsdatei liquibase.properties das Attribut url wie unten beschrieben fest.

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

Die Konfigurationsdatei liquibase.properties darf nur dieses Attribut enthalten. Andere Properties sind optional.

Der url-String muss options=-c%20spanner.ddl_transaction_mode=AutocommitExplicitTransaction enthalten, da Spanner keine DDL-Transaktionen unterstützt. So werden DDL-Transaktionen in DDL-Batches umgewandelt. Weitere Informationen finden Sie unter DDL-Optionen für PGAdapter.

Liquibase-Beispiele ansehen

Die Beispieldatei für das Änderungsprotokoll changelog.yaml, die in der Liquibase-Erweiterung für GoogleSQL enthalten ist, zeigt viele Funktionen von Liquibase und deren Verwendung mit Spanner.

Die Beispieldatei für das Änderungsprotokoll dbchangelog.xml, die im GitHub-Repository von PGAdapter und Liquibase verfügbar ist, zeigt viele Funktionen von Liquibase und deren Verwendung mit Spanner.

Kurzanleitung zu Liquibase

In dieser Kurzanleitung erfahren Sie, wie Sie mit Liquibase einer Datenbank eine Singers-Tabelle hinzufügen.

Hinweis

  • Sie müssen die vorherigen Schritte zur Installation von Liquibase ausgeführt haben.

  • Erstellen Sie eine Spanner-Instanz.

  • Erstellen Sie eine Datenbank im GoogleSQL- oder PostgreSQL-Dialekt.

  • Nur für Datenbanken mit PostgreSQL-Dialekt: PGAdapter muss auf demselben Computer wie Ihre Liquibase-Installation gestartet und ausgeführt werden. Weitere Informationen finden Sie unter PGAdapter starten.

  • Verwenden Sie das Script create_database_change_log.sql nur für PostgreSQL-Datenbanken, um die Metadatentabellen databasechangeloglock und databasechangelog zu erstellen. Sie müssen diese Tabellen erstellen, um die Tabellen zu überschreiben, die Liquibase automatisch in Ihrer Datenbank erstellt. So wird sichergestellt, dass in diesen Tabellen die richtigen PostgreSQL-Datentypen für Spanner verwendet werden.

    Sie können das Script mit dem folgenden Befehl ausführen:

    psql -h localhost -d DATABASE_NAME -f create_database_change_log.sql
    
  • Gewähren Sie der Spanner Liquibase-Erweiterung die vorübergehende Verwendung Ihrer Spanner-Nutzeranmeldedaten für den API-Zugriff, indem Sie den folgenden gcloud-Befehl ausführen:

    gcloud auth application-default login
    

changelog.yaml erstellen

  1. Geben Sie den folgenden YAML-Code in Ihren bevorzugten Editor ein.

    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)
    

    In dieser YAML-Datei wird eine Tabelle namens Singers mit dem Primärschlüssel SingerId und der Spalte Name zum Speichern des Namens des Sängers definiert.

    Bei PostgreSQL-Datenbanken empfehlen wir, Tabellen- und Spaltennamen ausschließlich in Kleinbuchstaben zu verwenden. Weitere Informationen finden Sie unter Berücksichtigung der Groß-/Kleinschreibung in PostgreSQL.

    Der createTable-Änderungssatz muss eine Primärschlüsseleinschränkung enthalten und der Name der Primärschlüsseleinschränkung muss pk_table_name sein.

  2. Speichern Sie die Änderungen als changelog.yaml.

Liquibase ausführen

Wenden Sie die Änderungsliste in changelog.yaml mit dem folgenden Befehl an:

liquibase --changeLogFile changelog.yaml update

Liquibase verwendet die URL, die Sie in der Datei liquibase.properties definiert haben. Sie können den Wert in der Datei überschreiben, indem Sie dem vorherigen Befehl das folgende Argument hinzufügen:

--url URL

Änderungen prüfen

Durch die Aktualisierungen im vorherigen Schritt wurde der Tabelle Singer Ihrer Datenbank hinzugefügt. Außerdem wurden die Tabellen DATABASECHANGELOG und DATABASECHANGELOGLOCK hinzugefügt (Datenbank mit GoogleSQL-Dialekt) oder aktualisiert (Datenbank mit PostgreSQL-Dialekt).

Sie können die Existenz dieser Tabellen über die Google Cloud Console oder die gcloud CLI prüfen. Wenn Sie beispielsweise die SQL-Abfrage SELECT * FROM INFORMATION_SCHEMA.TABLES ausführen, wird eine Liste aller Tabellen in Ihrer Datenbank zurückgegeben.

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

Sie können sich eine Liste der angewendeten Änderungen anzeigen lassen, indem Sie den Inhalt von DATABASECHANGELOG abfragen.

Nächste Schritte