全部產品
Search
文件中心

AnalyticDB:通過SQL訪問向量資料庫

更新時間:Jul 25, 2025

開啟向量引擎最佳化功能後,您可以通過SQL介面訪問雲原生資料倉儲AnalyticDB PostgreSQL版向量資料庫。本文介紹使用Java、Python和C語言三種用戶端的接入方式。

Java

雲原生資料倉儲AnalyticDB PostgreSQL版向量資料庫支援使用PostgreSQL或Greenplum的JDBC驅動包串連。JDBC串連資料庫的操作,請參見JDBC

在確保有PostgreSQL JDBC驅動的前提下,如果您使用Maven,可以在pom.xml檔案中添加以下依賴:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.5</version>
</dependency>

通過Java代碼訪問向量資料庫的範例程式碼如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class GreenplumSample {
    public static void main(String[] args) {
        String url = "jdbc:postgresql://yourhost:yourport/yourdbname";
        String user = "yourusername";
        String password = "yourpassword";

        try {
            // 載入驅動
            Class.forName("org.postgresql.Driver");
            // 建立串連
            Connection con = DriverManager.getConnection(url, user, password);
            // 建立語句
            Statement st = con.createStatement();
            // 執行查詢
            String query = "SELECT * FROM yourtable LIMIT 10";
            ResultSet rs = st.executeQuery(query);
            // 處理結果
            while(rs.next()) {
                // 假設知道結果集中至少有一列,且為字串類型
                String resultColumn = rs.getString(1);
                System.out.println(resultColumn);
            }
            // 關閉資源
            rs.close();
            st.close();
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Python

雲原生資料倉儲AnalyticDB PostgreSQL版向量資料庫可以使用psycopg2工具串連,並通過Python代碼匯入和查詢向量資料。psycopg2串連資料庫的操作,請參見Python

通過python代碼訪問向量資料庫的範例程式碼如下:

import psycopg2
from psycopg2 import pool

# 建立串連池
connection_pool = psycopg2.pool.SimpleConnectionPool(
    minconn=1,
    maxconn=10,
    user='your_username',
    password='your_password',
    host='your_host',
    port='your_port',
    database='your_database'
)

# 串連探活檢查
def is_connection_alive(conn):
    try:
        conn.cursor().execute("SELECT 1")
    except (psycopg2.OperationalError, psycopg2.InterfaceError):
        return False
    return True

# 從串連池擷取連線物件
def get_connection():
    conn = connection_pool.getconn()
    while not is_connection_alive(conn):
        conn = connection_pool.getconn()
    return conn

# 將連線物件放回串連池
def release_connection(conn):
    connection_pool.putconn(conn)

# 使用連線物件執行查詢
def execute_query(query):
    conn = get_connection()
    cursor = conn.cursor()
    try:
        cursor.execute(query)
        if query.startswith("SELECT"):
            result = cursor.fetchall()
        else:
            conn.commit()
            result = None
    except (psycopg2.DatabaseError, psycopg2.InterfaceError) as e:
        print(f"Error executing query: {e}")
        conn.rollback()
        result = None
    cursor.close()
    release_connection(conn)
    return result

# 樣本查詢
# 查詢
select_query = "SELECT * FROM your_table"
result = execute_query(select_query)
if result:
    print(result)

# 插入
insert_query = "INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2')"
execute_query(insert_query)

# 更新
update_query = "UPDATE your_table SET column1 = 'new_value' WHERE column2 = 'value2'"
execute_query(update_query)

# 刪除
delete_query = "DELETE FROM your_table WHERE column1 = 'value1'"
execute_query(delete_query)

C

雲原生資料倉儲AnalyticDB PostgreSQL版向量資料庫可以使用libpq庫串連,並使用C語言代碼匯入和查詢向量資料。

通過C語言代碼訪問向量資料庫的範例程式碼如下:

#include <stdio.h>
#include <stdlib.h>
#include <libpq-fe.h>

int main() {
    const char *conninfo;
    PGconn *conn;
    PGresult *res;
    int nFields;
    int i, j;

    // 設定連接字串
    conninfo = "dbname=yourdbname user=yourusername host=yourhostname port=yourport password=yourpassword";

    // 建立串連
    conn = PQconnectdb(conninfo);

    // 檢查狀態
    if (PQstatus(conn) != CONNECTION_OK) {
        fprintf(stderr, "串連失敗: %s", PQerrorMessage(conn));
        PQfinish(conn);
        exit(1);
    }

    // 執行一個查詢
    res = PQexec(conn, "SELECT * FROM yourtablename LIMIT 10");

    // 檢查是否正常返回了結果集
    if (PQresultStatus(res) != PGRES_TUPLES_OK) {
        fprintf(stderr, "SELECT命令未返回資料: %s", PQerrorMessage(conn));
        PQclear(res);
        PQfinish(conn);
        exit(1);
    }

    // 擷取欄位數
    nFields = PQnfields(res);

    // 列印每一行
    for (i = 0; i < PQntuples(res); i++) {
        for (j = 0; j < nFields; j++) {
            printf("%s = %s", PQfname(res, j), PQgetvalue(res, i, j));
        }
        printf("\n");
    }

    // 清理
    PQclear(res);

    // 關閉串連
    PQfinish(conn);

    return 0;
}

相關文檔

如果有更多其他語言用戶端的使用需求,請參見pgvector相容模式使用指南