Greenplum 基於 PostgreSQL 內核,兼容 PostgreSQL 協議,因此可直接使用 PostgreSQL JDBC 驅動連接。本文涵蓋驅動獲取、服務端配置、連接 URL 格式、完整 Java 代碼示例及常見坑點。
postgresql-42.x.x.jar) 安裝到系統目錄<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.3</version> <!-- 檢查最新版 -->
</dependency>
無需額外安裝,Maven 自動下載 JAR,構建時打包進應用,最簡潔。
# 允許所有 IP 連接 (生產請限制具體 IP)
listen_addresses = '*'
port = 5432 # 默認端口
max_connections = 200 # 根據內存調整
修改後需 gpstop -u 重載配置或重啟集群。
# TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 md5 # 允許所有 IP 密碼登錄
host all gpadmin 192.168.1.0/24 trust # 內網免密
# 生產建議: 具體 IP + md5/scram-sha-256 + SSL
修改後同樣需重載生效。
完全兼容 PostgreSQL 格式,三種常用形式:
| 格式 | 示例 | 說明 |
|---|---|---|
jdbc:postgresql:dbname | jdbc:postgresql:zwcdb | 本地 Unix Socket,需同機 |
jdbc:postgresql://host/dbname | jdbc:postgresql://192.168.1.23/zwcdb | 默認端口 5432 |
jdbc:postgresql://host:port/dbname | jdbc:postgresql://192.168.1.23:5432/zwcdb | 指定端口,最常用 |
常用參數:?user=zhongwc&password=zhongwc&ssl=false&ApplicationName=MyApp
package com.gp.dbtest;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class GPDBTest {
public static void main(String[] args) {
String url = "jdbc:postgresql://192.168.1.23:5432/zwcdb";
String user = "zhongwc";
String pwd = "zhongwc";
// 1. 加載驅動 (JDBC 4.0+ 可省略,保留兼容舊版)
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e) {
System.err.println("驅動未找到,請檢查 Maven 依賴或 classpath");
e.printStackTrace();
return;
}
// 2. 獲取連接 + 3. 執行查詢 (try-with-resources 自動關閉)
try (Connection conn = DriverManager.getConnection(url, user, pwd);
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM tab_gp LIMIT 1 OFFSET 0")) {
while (rs.next()) {
System.out.println("第1列: " + rs.getString(1));
}
System.out.println("連接 Greenplum 成功!");
} catch (SQLException e) {
System.err.println("數據庫操作失敗: " + e.getMessage());
e.printStackTrace();
}
}
}
dataSourceClassName=org.postgresql.ds.PGSimpleDataSource。st.setFetchSize(1000) 減少網絡交互。PreparedStatement.addBatch() + executeBatch(),配合 reWriteBatchedInserts=true (PG 42.2.5+) 大幅提升導入性能。ssl=true&sslmode=verify-full,配置信任存儲。| 錯誤 | 原因 | 解決 |
|---|---|---|
ClassNotFoundException: org.postgresql.Driver | 驅動 JAR 不在 classpath | Maven 依賴 / 手動放入 lib |
Connection refused | IP/端口錯誤、防火牆、listen_addresses 未配 | 檢查網絡、postgresql.conf、防火牆 |
FATAL: no pg_hba.conf entry for host | pg_hba.conf 未允許該 IP/用戶 | 添加 host 記錄並 reload |
ERROR: relation "tab_gp" does not exist | 表名大小寫/Schema 不對 | Greenplum 非引用識別符自動轉小寫,用雙引號 "Tab_GP" 保持大小寫 |