Collegare JDBC a un database in dialetto PostgreSQL

Puoi utilizzare il driver JDBC PostgreSQL o il driver JDBC Spanner con un database Spanner con dialetto PostgreSQL. Questa pagina spiega come connettersi al database con questi driver.

Driver JDBC PostgreSQL

Questa sezione spiega come connettere il driver JDBC PostgreSQL a un database con dialetto 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.48.4</version>
    </dependency>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-spanner-pgadapter</artifactId>
      <version>0.48.4</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 in 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 su cui è in esecuzione PGAdapter. Se esegui l'app localmente, 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 con dialetto PostgreSQL. Utilizza i socket di dominio Unix per la latenza più bassa possibile.

Per utilizzare i socket di dominio Unix, PGAdapter deve essere eseguito 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 su cui è in esecuzione PGAdapter. Se esegui l'app localmente, utilizza localhost.
  • argomento della riga di comando. Ad esempio, /tmp.
  • PORT: il numero di porta in cui è in esecuzione PGAdapter. Modifica questa impostazione nella stringa di connessione se PGAdapter è in esecuzione su una porta personalizzata. Altrimenti, utilizza la porta predefinita, 5432.

Driver JDBC di Spanner

Questa sezione spiega come utilizzare il driver JDBC Spanner per connettersi a un database con dialetto 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.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. Utilizza un URL di connessione JDBC Spanner per connetterti al database con dialetto 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