Conectar o JDBC a um banco de dados de dialeto PostgreSQL

É possível usar o driver JDBC do PostgreSQL ou do Spanner com um banco de dados do Spanner com dialeto PostgreSQL. Nesta página, explicamos como se conectar ao banco de dados com esses drivers.

Driver JDBC do PostgreSQL

Esta seção explica como conectar o driver JDBC do PostgreSQL a um banco de dados do Spanner com dialeto PostgreSQL. O JDBC é o driver Java padrão para PostgreSQL.

Se você usar o driver JDBC do PostgreSQL, será necessário usar o PGAdapter para traduzir entre o protocolo de rede do PostgreSQL e o protocolo de rede do Spanner. É possível adicionar o PGAdapter como uma dependência e executá-lo no processo com o aplicativo.

  1. Adicione o PGAdapter e o driver JDBC do PostgreSQL como dependências ao aplicativo.

    <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. Inicie o PGAdapter no processo com o aplicativo.
    OptionsMetadata.Builder builder =
      OptionsMetadata.newBuilder()
        .setProject("PROJECT_NAME")
        .setInstance("INSTANCE_NAME")
        .setPort(PORT);
    ProxyServer server = new ProxyServer(builder.build());
    server.startServer();
    server.awaitRunning();
          

    Substitua:

    • PORT: o número da porta em que o PGAdapter está em execução. Defina como 5432 na maioria dos casos ou 0 para usar uma porta atribuída dinamicamente.
  3. Verifique se o driver JDBC do PostgreSQL está carregado.
    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)); } } }

    Substitua:

    • APPLICATION_HOST: o nome do host ou o endereço IP da máquina em que o PGAdapter está em execução. Se estiver executando localmente, use localhost.

    O repositório do PGAdapter no GitHub contém um aplicativo de exemplo.

Soquetes de domínio Unix

Esta seção explica como usar soquetes de domínio Unix para conectar o driver JDBC do PostgreSQL a um banco de dados do Spanner com dialeto PostgreSQL. Use soquetes de domínio Unix para a menor latência possível.

Para usar soquetes de domínio Unix, o PGAdapter precisa estar em execução no mesmo host que o aplicativo cliente.

// 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)); } } }

Substitua:

  • APPLICATION_HOST: o nome do host ou o endereço IP da máquina em que o PGAdapter está em execução. Se estiver executando localmente, use localhost.
  • argumento de linha de comando. Por exemplo, /tmp.
  • PORT: o número da porta em que o PGAdapter está em execução. Mude isso na string de conexão se o PGAdapter estiver em execução em uma porta personalizada. Caso contrário, use a porta padrão, 5432.

Driver JDBC do Spanner

Esta seção explica como usar o driver JDBC do Spanner para se conectar a um banco de dados do Spanner com dialeto PostgreSQL.

  1. Adicione o driver JDBC do Spanner como uma dependência ao aplicativo.

    <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. Use um URL de conexão JDBC do Spanner para se conectar ao banco de dados do Spanner com dialeto PostgreSQL.

        // 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)); } } }

    O driver detecta automaticamente o dialeto SQL do banco de dados especificado. Um parâmetro de dialeto no URL de conexão não é obrigatório.

A seguir