Connettere JDBC a un database con dialetto PostgreSQL

Puoi utilizzare il driver JDBC PostgreSQL o il driver JDBC Spanner con un database di dialetti PostgreSQL di Spanner. Questa pagina spiega come connetterti al tuo database con questi driver.

Driver JDBC PostgreSQL

Questa sezione spiega come connettere il driver JDBC PostgreSQL a un database di dialetti PostgreSQL in Spanner. JDBC è il driver Java standard per PostgreSQL.

Se utilizzi il driver JDBC PostgreSQL, devi utilizzare PGAdapter per la conversione tra il protocollo di rete PostgreSQL e il protocollo di rete Spanner. Puoi aggiungere PGAdapter come dipendenza ed eseguirlo in-process con la tua applicazione.

  1. Aggiungi PGAdapter e il driver JDBC PostgreSQL come dipendenze alla tua applicazione.

    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>0.52.1</version>
    </dependency>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-spanner-pgadapter</artifactId>
      <version>0.52.1</version>
    </dependency>
  2. Avvia PGAdapter in-process con la tua applicazione.
    OptionsMetadata.Builder builder =
      OptionsMetadata.newBuilder()
        .setProject("PROJECT_NAME")
        .setInstance("INSTANCE_NAME")
        .setPort(PORT);
    ProxyServer server = new ProxyServer(builder.build());
    server.startServer();
    server.awaitRunning();
          

    Sostituisci quanto segue:

    • PORT: il numero di porta su cui è in esecuzione PGAdapter. Imposta 5432 nella maggior parte dei casi o 0 per utilizzare una porta assegnata dinamicamente.
  3. Assicurati che il driver JDBC PostgreSQL sia caricato.
    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)); } } }

    Sostituisci quanto segue:

    • APPLICATION_HOST: il nome host o l'indirizzo IP della macchina in cui è in esecuzione PGAdapter. In caso di esecuzione locale, utilizza localhost.

    Il repository GitHub di PGAdapter contiene un' applicazione di esempio.

Socket di dominio Unix

Questa sezione spiega come utilizzare i socket di dominio Unix per connettere il driver JDBC PostgreSQL a un database di dialetti PostgreSQL. Utilizza i socket di dominio Unix per la latenza più bassa possibile.

Per utilizzare i socket di dominio Unix, PGAdapter deve essere in esecuzione sullo stesso host dell'applicazione client.

// 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)); } } }

Sostituisci quanto segue:

  • APPLICATION_HOST: il nome host o l'indirizzo IP della macchina in cui è in esecuzione PGAdapter. In caso di esecuzione locale, utilizza localhost.
  • argomento della riga di comando. Ad esempio, /tmp.
  • PORT: il numero di porta su cui è in esecuzione PGAdapter. Se PGAdapter è in esecuzione su una porta personalizzata, modifica questa impostazione nella stringa di connessione. Altrimenti, utilizza la porta predefinita 5432.

Driver JDBC di Spanner

Questa sezione spiega come utilizzare il driver JDBC Spanner per connettersi a un database di dialetti PostgreSQL.

  1. Aggiungi il driver JDBC di Spanner come dipendenza alla tua applicazione.

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.google.cloud</groupId>
          <artifactId>libraries-bom</artifactId>
          <version>26.72.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. Utilizza un URL di connessione JDBC Spanner per connetterti al database di dialetti 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)); } } }

    Il driver rileva automaticamente il dialetto SQL del database specificato. Un parametro del dialetto nell'URL di connessione non è obbligatorio.

Passaggi successivi