如何連線到HybridDB(Greenplum)

竇賢明發表於2017-02-09

雲資料庫 HybridDB 基於開源資料庫Greenplum Database,而Greenplum 基於 PostgreSQL 8.2 分支開發,完整相容其訊息協議。因此,HybridDB 使用者可以直接使用支援 PostgreSQL 8.2 訊息協議的工具,例如 libpq、JDBC、ODBC、psycopg2、pgadmin III 等。

HybridDB提供了Redhat平臺的二進位制psql程式下載連結。Greenplum 官網也提供了一個安裝包,包含 JDBC、ODBC 和 libpq,方便安裝和使用,詳情請參見Greenplum 官方文件

psql

psql 是 Greenplum 中比較常用的工具,提供了豐富的命令,其二進位制檔案在 Greenplum 安裝後的 BIN 目錄下。使用步驟如下所示:

通過如下任意一種方式進行連線

  • 連線串的方式

    psql "host=yourgpdbaddress.gpdb.rds.aliyuncs.com port=3568 dbname=postgres user=gpdbaccount password=gpdbpassword"
            
    postgres=> select version();
                                               version                                            
    -----------------------------------------------------------------------------------------------
    PostgreSQL 8.3devel (Greenplum Database 4.3.99.00 build dev) compiled on Jun 26 2016 23:44:59
    (1 row)
  • 指定引數的方式

    psql  -h yourgpdbaddress.gpdb.rds.aliyuncs.com -p 3568 -d postgres -U gpdbaccount
  • 輸入密碼,進入 psql 的 Shell 介面。

    postgres=> select version();
                                                version                                            
    -----------------------------------------------------------------------------------------------
     PostgreSQL 8.3devel (Greenplum Database 4.3.99.00 build dev) compiled on Jun 26 2016 23:44:59
    (1 row)
引數說明:

- -h:指定主機地址。

- -p:指定埠號。

- -d:指定資料庫(預設的資料庫是 postgres),

- -U:指定連線的使用者。

- 可以通過`psql --help`檢視更多選項。在 psql 中,可以執行`?`檢視更多 psql 中支援的命令。

參考文件

  • 關於 Greenplum 的 psql 的更多使用方法,請參見文件“psql”。
  • 也可以使用 PostgreSQL 的 psql 命令,請注意使用細節上的差異。詳情請參見“PostgreSQL 8.3.23 Documentation — psql”。

pgAdmin III

pgAdmin III 是PostgreSQL圖形客戶端,可以直接用於連線HybridDB。詳情請參見這裡

pgAdmin III 1.6.3可以從PostgreSQL官網下載。pgAdmin III 1.6.3支援各種平臺(Windows、MacOS、Linux)。注意,HybridDB與PostgreSQL 8.2版本相容,因此必須使用pgAdmin III 1.6.3或之前的版本才能連線HybridDB(pgAdmin 4也是不支援的)。下載安裝後,開啟”檔案”->”新增伺服器”選單,可以看到配置連線的視窗。按如下圖類似的方式,填入”名稱“、”主機地址”、“埠號”、“資料庫”、“使用者名稱”、“密碼”等資訊,點選“確定”即可連線到HybridDB。

在pgAdmin中配置HybridDB連線

其他更多圖形客戶端,請參考 下載連結

JDBC

JDBC 採用 PostgreSQL 的即可。下載方法如下:

程式碼案例:

import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.sql.Statement;  
  
public class gp_conn {  
  
    public static void main(String[] args) {  
        try {  
            Class.forName("org.postgresql.Driver");  
            Connection db = DriverManager.getConnection("jdbc:postgresql://mygpdbpub.gpdb.rds.aliyuncs.com:3568/postgres","mygpdb","mygpdb");  

            Statement st = db.createStatement();  
            ResultSet rs = st.executeQuery("select * from gp_segment_configuration;");  
            while (rs.next()) {  
                System.out.print(rs.getString(1));  
                System.out.print("    |    ");  
                System.out.print(rs.getString(2));  
                System.out.print("    |    ");  
                System.out.print(rs.getString(3));  
                System.out.print("    |    ");  
                System.out.print(rs.getString(4));  
                System.out.print("    |    ");  
                System.out.print(rs.getString(5));  
                System.out.print("    |    ");  
                System.out.print(rs.getString(6));  
                System.out.print("    |    ");  
                System.out.print(rs.getString(7));  
                System.out.print("    |    ");  
                System.out.print(rs.getString(8));  
                System.out.print("    |    ");  
                System.out.print(rs.getString(9));  
                System.out.print("    |    ");  
                System.out.print(rs.getString(10));  
                System.out.print("    |    ");  
                System.out.println(rs.getString(11));  
            }  
            rs.close();  
            st.close();  
        } catch (ClassNotFoundException e) {  
            e.printStackTrace();  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }  
    }  
}

詳細文件,請參見“The PostgreSQL JDBC Interface”。

Python

Python 連線 Greenplum 和 PostgreSQL 用的庫是 psycopg2。使用步驟如下:

安裝 psycopg2

在 CentOS 下,有如下三種安裝方法:

  • 方法一,執行如下命令:

    yum -y install python-psycopg2
  • 方法二,執行如下命令:

    pip install psycopg2
  • 從原始碼安裝:

    yum install -y postgresql-devel*
        
    wget  http://initd.org/psycopg/tarballs/PSYCOPG-2-6/psycopg2-2.6.tar.gz
    tar xf psycopg2-2.6.tar.gz
    cd psycopg2-2.6
    python setup.py build
    sudo python setup.py install

安裝後,設定 PYTHONPATH,之後就可以引用,如:

import psycopg2

sql = `select * from gp_segment_configuration;`

conn = psycopg2.connect(database=`gpdb`, user=`mygpdb`, password=`mygpdb`, host=`mygpdbpub.gpdb.rds.aliyuncs.com`, port=3568)

conn.autocommit = True
cursor = conn.cursor()
cursor.execute(sql)
rows = cursor.fetchall()

for row in rows:
    print row

conn.commit()
conn.close()

會得到類似以下的結果:

(1, -1, `p`, `p`, `s`, `u`, 3022, `192.168.2.158`, `192.168.2.158`, None, None)
(6, -1, `m`, `m`, `s`, `u`, 3019, `192.168.2.47`, `192.168.2.47`, None, None)
(2, 0, `p`, `p`, `s`, `u`, 3025, `192.168.2.148`, `192.168.2.148`, 3525, None)
(4, 0, `m`, `m`, `s`, `u`, 3024, `192.168.2.158`, `192.168.2.158`, 3524, None)
(3, 1, `p`, `p`, `s`, `u`, 3023, `192.168.2.158`, `192.168.2.158`, 3523, None)
(5, 1, `m`, `m`, `s`, `u`, 3026, `192.168.2.148`, `192.168.2.148`, 3526, None)

libpq

libpq 是 PostgreSQL 資料庫的 C 語言介面,在 C 程式中通過 libpq 庫訪問 PostgreSQL 資料庫並進行資料庫操作。在安裝了 Greenplum 或者 PostgreSQL 之後,在其 lib 目錄下可以找到其靜態庫和動態庫。

相關案例請參見這裡,此處不再列舉。

關於 libpq 詳情,請參見“PostgreSQL 9.4.10 Documentation — Chapter 31. libpq – C Library”。

ODBC

PostgreSQL 的 ODBC 是基於 LGPL(GNU Lesser General Public License)協議的開源版本,可以在 PostgreSQL 官網下載,可以單擊這裡

  • 安裝驅動

    yum install -y unixODBC.x86_64  
    yum install -y postgresql-odbc.x86_64  
  • 檢視驅動配置

    cat /etc/odbcinst.ini 
    # Example driver definitions
    
    # Driver from the postgresql-odbc package
    # Setup from the unixODBC package
    [PostgreSQL]
    Description     = ODBC for PostgreSQL
    Driver          = /usr/lib/psqlodbcw.so
    Setup           = /usr/lib/libodbcpsqlS.so
    Driver64        = /usr/lib64/psqlodbcw.so
    Setup64         = /usr/lib64/libodbcpsqlS.so
    FileUsage       = 1
    
    
    # Driver from the mysql-connector-odbc package
    # Setup from the unixODBC package
    [MySQL]
    Description     = ODBC for MySQL
    Driver          = /usr/lib/libmyodbc5.so
    Setup           = /usr/lib/libodbcmyS.so
    Driver64        = /usr/lib64/libmyodbc5.so
    Setup64         = /usr/lib64/libodbcmyS.so
    FileUsage       = 1
  • 配置DSN

    [mygpdb]
    Description = Test to gp
    Driver = PostgreSQL
    Database = ****
    Servername = ****.gpdb.rds.aliyuncs.com
    UserName = ****
    Password = ****
    Port = ****
    ReadOnly = 0
將這裡的“****”改成對應的連線資訊。
  • 測試連通性

    echo "select count(*) from pg_class" | isql mygpdb
    +---------------------------------------+
    | Connected!                            |
    |                                       |
    | sql-statement                         |
    | help [tablename]                      |
    | quit                                  |
    |                                       |
    +---------------------------------------+
    SQL> select count(*) from pg_class
    +---------------------+
    | count               |
    +---------------------+
    | 388                 |
    +---------------------+
    SQLRowCount returns 1
    1 rows fetched

到這裡ODBC即已連線上例項,應用連線ODBC即可,可以參考這裡C#連線到PostgreSQL

參考文件


相關文章