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 conectarte a tu base de datos con cualquiera de estos controladores.

Controlador de JDBC de PostgreSQL

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

Para usar el controlador de JDBC de PostgreSQL, debes usar PGAdapter para traducir entre el protocolo de red de PostgreSQL y el protocolo de red de Spanner. Puedes agregar PGAdapter como una dependencia y ejecutarlo en proceso con tu aplicación.

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

    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>0.42.2</version>
    </dependency>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-spanner-pgadapter</artifactId>
      <version>0.42.2</version>
    </dependency>
  2. Inicia PGAdapter en proceso con tu aplicación.

              OptionsMetadata.Builder builder =
                OptionsMetadata.newBuilder()
                  .setProject("my-project")
                  .setInstance("my-instance")
                  .setPort(5432);
              ProxyServer server = new ProxyServer(builder.build());
              server.startServer();
              server.awaitRunning();
              

    Reemplaza lo siguiente:

    • my-project: Es el ID del proyecto de Google Cloud en el que se encuentra tu base de datos de dialecto de PostgreSQL.
    • my-instance: Es el ID de la instancia de Spanner en la que se encuentra tu base de datos de dialecto de PostgreSQL.
    • 5432: Es el número de puerto en el que se ejecuta PGAdapter. Establece el puerto en “0” para usar un puerto asignado de forma dinámica.
  3. Asegúrate de que el controlador de JDBC de PostgreSQL esté cargado.

            Class.forName("org.postgresql.Driver");
    
            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(
                    "Greetings from Cloud Spanner PostgreSQL: %s\n", resultSet.getString(1));
                }
              }
            }
           

    Reemplaza lo siguiente:

    • localhost: Es el host en el que se ejecuta PGAdapter.
    • 5432: Es el número de puerto en el que se ejecuta PGAdapter.
    • my-database: Es el nombre de la base de datos de dialecto de PostgreSQL.

    El repositorio de GitHub de PGAdapter contiene una aplicación de ejemplo funcional.

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 tu aplicación.

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.google.cloud</groupId>
          <artifactId>libraries-bom</artifactId>
          <version>26.52.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 del 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(
                  "Greetings from Cloud Spanner PostgreSQL: %s\n", resultSet.getString(1));
              }
            }
          }
          

    Reemplaza lo siguiente:

    • my-project: Es el ID del proyecto de Google Clouden el que se encuentra tu base de datos de dialecto de PostgreSQL.
    • my-instance: Es el ID de la instancia de Spanner en la que se encuentra tu base de datos de dialecto de PostgreSQL.
    • my-database: Es el nombre de la base de datos de dialecto de PostgreSQL.

    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?