將 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.50.0</version>
    </dependency>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-spanner-pgadapter</artifactId>
      <version>0.50.0</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.66.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 連線網址連線至 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 方言。連線網址中不需要方言參數。

後續步驟