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

Puedes usar el controlador JDBC de PostgreSQL o el controlador JDBC de Spanner con una base de datos de Spanner con dialecto de PostgreSQL. En esta página, se explica cómo conectarte a tu 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 de PostgreSQL en Spanner. JDBC es el controlador estándar de Java para PostgreSQL.

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

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

    <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. Inicia PGAdapter en proceso con 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();
          

    Reemplaza lo siguiente:

    • PORT: Es el número de puerto en el que se ejecuta PGAdapter. Establece 5432 en la mayoría de los casos o 0 para usar un puerto asignado de forma dinámica.
  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)); } } }

    Reemplaza lo siguiente:

    • APPLICATION_HOST: Es el nombre de host o la dirección IP de la máquina en la que se ejecuta PGAdapter. Si ejecutas el comando 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 menor latencia 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)); } } }

Reemplaza lo siguiente:

  • APPLICATION_HOST: Es el nombre de host o la dirección IP de la máquina en la que se ejecuta PGAdapter. Si ejecutas el comando de forma local, usa localhost.
  • argumento de la línea de comandos. Por ejemplo, /tmp.
  • PORT: Es el número de puerto en el que se ejecuta PGAdapter. Cambia esto 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 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.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. Usa una URL de conexión JDBC de Spanner para conectarte a la base de datos con dialecto de 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 de SQL de la base de datos especificada. No se requiere un parámetro de dialecto en la URL de conexión.

¿Qué sigue?

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