Spanner の PostgreSQL 言語データベースに対して PostgreSQL JDBC ドライバまたは Spanner JDBC ドライバを使用できます。このページでは、これらのドライバを使用してデータベースに接続する方法について説明します。
PostgreSQL JDBC ドライバ
このセクションでは、PostgreSQL JDBC ドライバを Spanner の PostgreSQL 言語データベースに接続する方法について説明します。JDBC は PostgreSQL の標準 Java ドライバです。
PostgreSQL JDBC ドライバを使用する場合は、PGAdapter を使用して PostgreSQL ネットワーク プロトコルと Spanner ネットワーク プロトコル間の変換を行う必要があります。PGAdapter を依存関係として追加し、アプリケーションでこのアダプタをインプロセスで実行できます。
- PGAdapter と PostgreSQL JDBC ドライバを依存関係としてアプリケーションに追加します。
- アプリケーションで 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
に設定します。
- PORT: PGAdapter が実行されているポート番号。通常は
- 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 リポジトリにサンプル アプリケーションがあります。
- APPLICATION_HOST: PGAdapter が実行されているマシンのホスト名または IP アドレス。ローカルで実行している場合は
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
を使用します。
コマンドライン引数。例: - PORT: PGAdapter が実行されているポート番号。PGAdapter がカスタムポートで実行されている場合は、接続文字列でこれを変更します。それ以外の場合は、デフォルト ポートの
5432
を使用します。
/tmp
Spanner JDBC ドライバ
このセクションでは、Spanner JDBC ドライバを使用して PostgreSQL 言語データベースに接続する方法について説明します。
- Spanner JDBC ドライバを依存関係としてアプリケーションに追加します。
- 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 の言語パラメータは必須ではありません。
次のステップ
- PGAdapter について詳細を確認する。
- PGAdapter GitHub リポジトリの PGAdapter - JDBC 接続オプションで、PostgreSQL JDBC ドライバの接続オプションの詳細について確認する。