Cómo conectar JDBC a una base de datos de dialecto de PostgreSQL

Puedes usar el controlador de JDBC de PostgreSQL y el controlador de JDBC de Spanner con una base de datos de dialecto PostgreSQL de Spanner. En esta página, se explica cómo conectar a tu base de datos con cualquiera de estos controladores.

Controlador JDBC de PostgreSQL

En esta sección, se explica cómo conectar el controlador de JDBC de PostgreSQL a una base de datos de dialectos de PostgreSQL. en Spanner. JDBC es el controlador Java estándar para PostgreSQL.

El uso del controlador PostgreSQL JDBC requiere el uso de PGAdapter para traducir entre el protocolo de red de PostgreSQL y la Protocolo de red de Spanner. Puedes agregar PGAdapter como dependencia y ejecutarla en proceso con tu aplicación.

1. Agrega PGAdapter y el controlador PostgreSQL JDBC como dependencias para tu aplicación.

<dependency>
  <groupId>org.postgresql</groupId>
  <artifactId>postgresql</artifactId>
  <version>0.39.0</version>
</dependency>
<dependency>
  <groupId>com.google.cloud</groupId>
  <artifactId>google-cloud-spanner-pgadapter</artifactId>
  <version>0.39.0</version>
</dependency>

2. Inicia PGAdapter en proceso con tu aplicación.

OptionsMetadata.Builder builder =
    OptionsMetadata.newBuilder()
        .setProject("my-project")
        .setInstance("my-instance")
        // Set the port to 0 to use a dynamically assigned port.
        .setPort(5432);
ProxyServer server = new ProxyServer(builder.build());
server.startServer();
server.awaitRunning();
      

3. Especifica localhost y 5432 como el host y el puerto del servidor de la base de datos en la Cadena de conexión de JDBC.

// Make sure the PG JDBC driver is loaded.
Class.forName("org.postgresql.Driver");

// Replace localhost and 5432 with the host and port number where PGAdapter is running.
try (Connection connection =
    DriverManager.getConnection("jdbc:postgresql://localhost:5432/my-database")) {
  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));
    }
  }
}
      

El repositorio de GitHub de PGAdapter contiene un que funciona muy bien.

Controlador de JDBC de Spanner

En esta sección, se explica cómo usar el controlador JDBC de Spanner para conectarse a una base de datos con dialecto de PostgreSQL.

1. Agrega el controlador JDBC de Spanner como una dependencia a la aplicación.

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>libraries-bom</artifactId>
      <version>26.48.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. Usa una URL de conexión de JDBC de Spanner para conectarte a la base de datos de dialecto de PostgreSQL.

try (Connection connection = DriverManager.getConnection(
    "jdbc:cloudspanner:/projects/my-project/instances/my-instance/databases/my-database")) {
  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));
    }
  }
}
        

El controlador detecta automáticamente el dialecto de SQL de la base de datos especificada. No se requiere un parámetro de dialecto en la URL de conexión.

¿Qué sigue?