JDBC を PostgreSQL 言語データベースに接続する

Spanner の PostgreSQL 言語データベースに対して PostgreSQL JDBC ドライバまたは Spanner JDBC ドライバを使用できます。このページでは、これらのドライバを使用してデータベースに接続する方法について説明します。

PostgreSQL JDBC ドライバ

このセクションでは、PostgreSQL JDBC ドライバを Spanner の PostgreSQL 言語データベースに接続する方法について説明します。JDBC は PostgreSQL の標準 Java ドライバです。

PostgreSQL JDBC ドライバを使用する場合は、PGAdapter を使用して PostgreSQL ネットワーク プロトコルと Spanner ネットワーク プロトコル間の変換を行う必要があります。PGAdapter を依存関係として追加し、アプリケーションでこのアダプタをインプロセスで実行できます。

  1. PGAdapter と PostgreSQL JDBC ドライバを依存関係としてアプリケーションに追加します。

    <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. アプリケーションで PGAdapter をインプロセスで起動します。
    OptionsMetadata.Builder builder =
      OptionsMetadata.newBuilder()
        .setProject("PROJECT_NAME")
        .setInstance("INSTANCE_NAME")
        .setPort(PORT);
    ProxyServer server = new ProxyServer(builder.build());
    server.startServer();
    server.awaitRunning();
          

    次のように置き換えます。

    • PORT: PGAdapter が実行されているポート番号。通常は 5432 に設定します。動的に割り当てられたポートを使用する場合は 0 に設定します。
  3. PostgreSQL JDBC ドライバが読み込まれていることを確認します。
    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)); } } }

    次のように置き換えます。

    • APPLICATION_HOST: PGAdapter が実行されているマシンのホスト名または IP アドレス。ローカルで実行している場合は localhost を使用します。

    PGAdapter GitHub リポジトリにサンプル アプリケーションがあります。

Unix ドメイン ソケット

このセクションでは、Unix ドメイン ソケットを使用して PostgreSQL JDBC ドライバを PostgreSQL 言語データベースに接続する方法について説明します。レイテンシを最小限に抑えるには、Unix ドメイン ソケットを使用します。

Unix ドメイン ソケットを使用するには、PGAdapter がクライアント アプリケーションと同じホストで実行されている必要があります。

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

次のように置き換えます。

  • APPLICATION_HOST: PGAdapter が実行されているマシンのホスト名または IP アドレス。ローカルで実行している場合は localhost を使用します。
  • コマンドライン引数。例: /tmp
  • PORT: PGAdapter が実行されているポート番号。PGAdapter がカスタムポートで実行されている場合は、接続文字列でこれを変更します。それ以外の場合は、デフォルト ポートの 5432 を使用します。

Spanner JDBC ドライバ

このセクションでは、Spanner JDBC ドライバを使用して PostgreSQL 言語データベースに接続する方法について説明します。

  1. Spanner JDBC ドライバを依存関係としてアプリケーションに追加します。

    <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. Spanner JDBC 接続 URL を使用して 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)); } } }

    指定されたデータベースの SQL 言語は自動的に検出されます。接続 URL の言語パラメータは必須ではありません。

次のステップ