JDBC mit einer Datenbank im PostgreSQL-Dialekt verbinden

Sie können entweder den PostgreSQL-JDBC-Treiber oder den Spanner-JDBC-Treiber mit einer Spanner-Datenbank mit PostgreSQL-Dialekt verwenden. Auf dieser Seite wird beschrieben, wie Sie mit diesen Treibern eine Verbindung zu Ihrer Datenbank herstellen.

PostgreSQL-JDBC-Treiber

In diesem Abschnitt wird beschrieben, wie Sie den PostgreSQL JDBC-Treiber mit einer Datenbank mit PostgreSQL-Dialekt in Spanner verbinden. JDBC ist der Standard-Java-Treiber für PostgreSQL.

Wenn Sie den PostgreSQL JDBC-Treiber verwenden, müssen Sie PGAdapter verwenden, um zwischen dem PostgreSQL-Netzwerkprotokoll und dem Spanner-Netzwerkprotokoll zu übersetzen. Sie können PGAdapter als Abhängigkeit hinzufügen und als Verarbeitungsprozess mit Ihrer Anwendung ausführen.

  1. Fügen Sie PGAdapter und den PostgreSQL-JDBC-Treiber als Abhängigkeiten zu Ihrer Anwendung hinzu.

    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>0.48.4</version>
    </dependency>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-spanner-pgadapter</artifactId>
      <version>0.48.4</version>
    </dependency>
  2. Starten Sie PGAdapter als Verarbeitungsprozess mit Ihrer Anwendung.
    OptionsMetadata.Builder builder =
      OptionsMetadata.newBuilder()
        .setProject("PROJECT_NAME")
        .setInstance("INSTANCE_NAME")
        .setPort(PORT);
    ProxyServer server = new ProxyServer(builder.build());
    server.startServer();
    server.awaitRunning();
          

    Ersetzen Sie Folgendes:

    • PORT: Die Portnummer, unter der PGAdapter ausgeführt wird. In den meisten Fällen auf 5432 oder auf 0 festlegen, um einen dynamisch zugewiesenen Port zu verwenden.
  3. Prüfen Sie, ob der PostgreSQL-JDBC-Treiber geladen ist.
    Class.forName("org.postgresql.Driver");
    try (Connection connection = DriverManager.getConnection("jdbc:postgresql://APPLICATION_HOST:PORT/DATABASE_NAME")) { try (ResultSet resultSet = connection.createStatement().executeQuery("select 'Hello world!' as hello")) { while (resultSet.next()) { System.out.printf( "Greetings from Cloud Spanner PostgreSQL: %s\n", resultSet.getString(1)); } } }

    Ersetzen Sie Folgendes:

    • APPLICATION_HOST: der Hostname oder die IP-Adresse des Computers, auf dem PGAdapter ausgeführt wird. Bei einer lokalen Ausführung verwenden Sie localhost.

    Das PGAdapter-GitHub-Repository enthält eine Beispielanwendung.

Unix Domain Sockets

In diesem Abschnitt wird beschrieben, wie Sie Unix-Domain-Sockets verwenden, um den PostgreSQL-JDBC-Treiber mit einer Datenbank mit PostgreSQL-Dialekt zu verbinden. Verwenden Sie Unix-Domain-Sockets für die niedrigstmögliche Latenz.

Wenn Sie Unix-Domain-Sockets verwenden möchten, muss PGAdapter auf demselben Host wie die Clientanwendung ausgeführt werden.

// Make sure the PG JDBC driver is loaded.
Class.forName("org.postgresql.Driver");
try (Connection connection = DriverManager.getConnection("jdbc:postgresql://APPLICATION_HOST/DATABASE_NAME" + "?socketFactory=org.newsclub.net.unix.AFUNIXSocketFactory$FactoryArg" + "&socketFactoryArg=DIRECTORY_NAME.s.PGSQL.PORT")) { try (ResultSet resultSet = connection.createStatement().executeQuery("select 'Hello world!' as hello")) { while (resultSet.next()) { System.out.printf("Greeting from Cloud Spanner PostgreSQL: %s\n", resultSet.getString(1)); } } }

Ersetzen Sie Folgendes:

  • APPLICATION_HOST: der Hostname oder die IP-Adresse des Computers, auf dem PGAdapter ausgeführt wird. Bei einer lokalen Ausführung verwenden Sie localhost.
  • Befehlszeilenargument. Beispiel: /tmp.
  • PORT: Die Portnummer, unter der PGAdapter ausgeführt wird. Ändern Sie dies im Verbindungsstring, wenn PGAdapter auf einem benutzerdefinierten Port ausgeführt wird. Verwenden Sie andernfalls den Standardport 5432.

Spanner-JDBC-Treiber

In diesem Abschnitt wird beschrieben, wie Sie mit dem Spanner-JDBC-Treiber eine Verbindung zu einer Datenbank mit PostgreSQL-Dialekt herstellen.

  1. Fügen Sie den Spanner-JDBC-Treiber als Abhängigkeit zu Ihrer Anwendung hinzu.

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.google.cloud</groupId>
          <artifactId>libraries-bom</artifactId>
          <version>26.63.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    
    <dependencies>
      <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>google-cloud-spanner-jdbc</artifactId>
        <exclusions>
          <exclusion>
            <groupId>com.google.api.grpc</groupId>
            <artifactId>proto-google-cloud-spanner-executor-v1</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
  2. Verwenden Sie eine Spanner-JDBC-Verbindungs-URL, um eine Verbindung zur Datenbank mit PostgreSQL-Dialekt herzustellen.

        // Make sure the PostgreSQL JDBC driver is loaded.
        Class.forName("org.postgresql.Driver");
    try (Connection connection = DriverManager.getConnection( "jdbc:cloudspanner:/projects/PROJECT_NAME/instances/INSTANCE_NAME/databases/DATABASE_NAME")) { try (ResultSet resultSet = connection.createStatement().executeQuery("select 'Hello world!' as hello")) { while (resultSet.next()) { System.out.printf( "Greetings from Cloud Spanner PostgreSQL: %s\n", resultSet.getString(1)); } } }

    Der Treiber erkennt den SQL-Dialekt der angegebenen Datenbank automatisch. Ein Dialektparameter in der Verbindungs-URL ist nicht erforderlich.

Nächste Schritte