Conectar o JDBC a um banco de dados do dialeto PostgreSQL

É possível usar o driver JDBC do PostgreSQL ou o do Spanner com um banco de dados do Spanner no dialeto PostgreSQL. Esta página explica 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 de dialeto PostgreSQL no Spanner. O JDBC é o driver Java padrão para PostgreSQL.

Se você usar o driver JDBC do PostgreSQL, use 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 seu aplicativo.

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

    <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. Inicie o PGAdapter no processo com seu 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 endereço IP da máquina em que o PGAdapter está sendo executado. Se você estiver executando localmente, use localhost.

    O repositório PGAdapter do 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 de 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 endereço IP da máquina em que o PGAdapter está sendo executado. Se você 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 sendo executado em uma porta personalizada. Caso contrário, use a porta padrão 5432.

Driver JDBC do Spanner

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

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

    <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. Use um URL de conexão JDBC do Spanner para se conectar ao banco de dados de 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. Não é necessário um parâmetro de dialeto no URL de conexão.

A seguir