Associe o JDBC a uma base de dados de dialeto PostgreSQL

Pode usar o controlador JDBC do PostgreSQL ou o controlador JDBC do Spanner com uma base de dados do dialeto PostgreSQL do Spanner. Esta página explica como estabelecer ligação à sua base de dados com estes controladores.

Controlador JDBC do PostgreSQL

Esta secção explica como associar o controlador JDBC do PostgreSQL a uma base de dados com dialeto do PostgreSQL no Spanner. O JDBC é o controlador Java padrão para o PostgreSQL.

Se usar o controlador JDBC do PostgreSQL, tem de usar o PGAdapter para fazer a tradução entre o protocolo de rede do PostgreSQL e o protocolo de rede do Spanner. Pode adicionar o PGAdapter como uma dependência e executá-lo no processo com a sua aplicação.

  1. Adicione o PGAdapter e o controlador JDBC do PostgreSQL como dependências à sua aplicação.

    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>0.51.0</version>
    </dependency>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-spanner-pgadapter</artifactId>
      <version>0.51.0</version>
    </dependency>
  2. Inicie o PGAdapter no processo com a sua aplicação.
    OptionsMetadata.Builder builder =
      OptionsMetadata.newBuilder()
        .setProject("PROJECT_NAME")
        .setInstance("INSTANCE_NAME")
        .setPort(PORT);
    ProxyServer server = new ProxyServer(builder.build());
    server.startServer();
    server.awaitRunning();
          

    Substitua o seguinte:

    • PORT: o número da porta onde o PGAdapter está a ser executado. Defina como 5432 na maioria dos casos ou 0 para usar uma porta atribuída dinamicamente.
  3. Certifique-se de que o controlador 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 o seguinte:

    • APPLICATION_HOST: o nome de anfitrião ou o endereço IP da máquina onde o PGAdapter está a ser executado. Se estiver a executar localmente, use localhost.

    O repositório do GitHub do PGAdapter contém uma aplicação de exemplo.

Sockets de domínio Unix

Esta secção explica como usar sockets de domínio Unix para ligar o controlador JDBC do PostgreSQL a uma base de dados de dialeto PostgreSQL. Use sockets de domínio Unix para a latência mais baixa possível.

Para usar sockets de domínio Unix, o PGAdapter tem de estar em execução no mesmo anfitrião que a aplicação 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 o seguinte:

  • APPLICATION_HOST: o nome de anfitrião ou o endereço IP da máquina onde o PGAdapter está a ser executado. Se estiver a executar localmente, use localhost.
  • argumento de linha de comandos. Por exemplo, /tmp.
  • PORT: o número da porta onde o PGAdapter está a ser executado. Altere isto na string de ligação se o PGAdapter estiver a ser executado numa porta personalizada. Caso contrário, use a porta predefinida, 5432.

Controlador JDBC do Spanner

Esta secção explica como usar o controlador JDBC do Spanner para estabelecer ligação a uma base de dados com dialeto PostgreSQL.

  1. Adicione o controlador JDBC do Spanner como uma dependência à sua aplicação.

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.google.cloud</groupId>
          <artifactId>libraries-bom</artifactId>
          <version>26.69.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 ligação JDBC do Spanner para se ligar à base de dados do 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 controlador deteta automaticamente o dialeto SQL da base de dados especificada. Não é necessário um parâmetro de dialeto no URL de ligação.

O que se segue?