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 im PostgreSQL-Dialekt verwenden. Auf dieser Seite wird erläutert, wie Sie mit diesen Treibern eine Verbindung zu Ihrer Datenbank herstellen.

PostgreSQL-JDBC-Treiber

In diesem Abschnitt wird erläutert, wie Sie den PostgreSQL-JDBC-Treiber mit einer Datenbank im 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 es 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.54.1</version>
    </dependency>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-spanner-pgadapter</artifactId>
      <version>0.54.1</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, auf der PGAdapter ausgeführt wird. In den meisten Fällen auf 5432 oder auf 0 setzen, 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 lokaler Ausführung, localhost verwenden.

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

Unix Domain Sockets

In diesem Abschnitt wird erläutert, wie Sie Unix Domain Sockets verwenden, um den PostgreSQL-JDBC-Treiber mit einer Datenbank im PostgreSQL-Dialekt zu verbinden. Verwenden Sie Unix Domain Sockets, um die Latenz so gering wie möglich zu halten.

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 lokaler Ausführung, localhost verwenden.
  • Befehlszeilenargument. Beispiel: /tmp.
  • PORT: die Portnummer, auf der PGAdapter ausgeführt wird. Ändern Sie dies in der Verbindungs-URL, wenn PGAdapter auf einem benutzerdefinierten Port ausgeführt wird. Verwenden Sie andernfalls den Standardport, 5432.

Spanner-JDBC-Treiber

In diesem Abschnitt wird erläutert, wie Sie den Spanner-JDBC-Treiber verwenden, um eine Verbindung zu einer Datenbank im PostgreSQL-Dialekt herzustellen.

  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.76.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 im 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 automatisch den SQL-Dialekt der angegebenen Datenbank. Ein Dialektparameter in der Verbindungs-URL ist nicht erforderlich.

Nächste Schritte