Conectar JDBC a una base de datos con dialecto PostgreSQL

Puedes usar el controlador JDBC de PostgreSQL o el controlador JDBC de Spanner con una base de datos de Spanner con dialecto PostgreSQL. En esta página se explica cómo conectarse a su base de datos con estos controladores.

Controlador JDBC de PostgreSQL

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

Si usas el controlador JDBC de PostgreSQL, debes usar PGAdapter para traducir entre el protocolo de red de PostgreSQL y el protocolo de red de Spanner. Puedes añadir PGAdapter como dependencia y ejecutarlo en el proceso de tu aplicación.

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

    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>0.50.2</version>
    </dependency>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-spanner-pgadapter</artifactId>
      <version>0.50.2</version>
    </dependency>
  2. Inicia PGAdapter en el proceso de tu aplicación.
    OptionsMetadata.Builder builder =
      OptionsMetadata.newBuilder()
        .setProject("PROJECT_NAME")
        .setInstance("INSTANCE_NAME")
        .setPort(PORT);
    ProxyServer server = new ProxyServer(builder.build());
    server.startServer();
    server.awaitRunning();
          

    Haz los cambios siguientes:

    • PORT: número de puerto en el que se ejecuta PGAdapter. En la mayoría de los casos, se debe definir como 5432 o 0 para usar un puerto asignado dinámicamente.
  3. Asegúrate de que el controlador JDBC de PostgreSQL esté cargado.
    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)); } } }

    Haz los cambios siguientes:

    • APPLICATION_HOST: el nombre de host o la dirección IP del equipo en el que se ejecuta PGAdapter. Si se ejecuta de forma local, usa localhost.

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

Sockets de dominio Unix

En esta sección se explica cómo usar sockets de dominio Unix para conectar el controlador JDBC de PostgreSQL a una base de datos de dialecto PostgreSQL. Usa sockets de dominio Unix para obtener la latencia más baja posible.

Para usar sockets de dominio Unix, PGAdapter debe ejecutarse en el mismo host que la aplicación 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)); } } }

Haz los cambios siguientes:

  • APPLICATION_HOST: el nombre de host o la dirección IP del equipo en el que se ejecuta PGAdapter. Si se ejecuta de forma local, usa localhost.
  • argumento de línea de comandos. Por ejemplo, /tmp.
  • PORT: número de puerto en el que se ejecuta PGAdapter. Cambia este valor en la cadena de conexión si PGAdapter se ejecuta en un puerto personalizado. De lo contrario, usa el puerto predeterminado, 5432.

Controlador 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 PostgreSQL.

  1. Añade el controlador JDBC de Spanner como dependencia a tu aplicación.

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.google.cloud</groupId>
          <artifactId>libraries-bom</artifactId>
          <version>26.67.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 JDBC de Spanner para conectarte a la base de datos con dialecto 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)); } } }

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

Siguientes pasos

  • PGAdapter
  • Para obtener más información sobre las opciones de conexión del controlador JDBC de PostgreSQL, consulta PGAdapter - JDBC Connection Options (PGAdapter: opciones de conexión JDBC) en el repositorio de GitHub de PGAdapter.