すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:SQL 文を使用してベクトルデータベースにアクセスする

最終更新日:Jul 25, 2025

ベクトルエンジン最適化機能を有効にすると、SQL 文を使用して AnalyticDB for PostgreSQL ベクトルデータベースにアクセスできます。このトピックでは、Java、Python、および C を使用してベクトルデータベースにアクセスする方法について説明します。

Java

標準の PostgreSQL JDBC ドライバーを使用して、AnalyticDB for PostgreSQL に接続できます。

開始する前に、プロジェクトで PostgreSQL JDBC ドライバーが使用可能であることを確認してください。Maven を使用する場合は、pom.xml ファイルに次の依存関係を追加します。

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

次のサンプルコードを使用して、接続してクエリを実行します。

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()) {
                // 例えば、結果セットには文字列型の列が少なくとも 1 つ含まれています。
                String resultColumn = rs.getString(1);
                System.out.println(resultColumn);
            }
            // リソースを閉じます。
            rs.close();
            st.close();
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Python

psycopg2 ライブラリを使用して、AnalyticDB for PostgreSQL に接続できます。

開始する前に、ライブラリをインストールします。

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)

詳細については、「Python」をご参照ください。

C

libpq ライブラリを使用して、AnalyticDB for PostgreSQL に接続できます。

次のサンプルコードを使用して、接続してクエリを実行します。ライブラリにリンクするには、-lpq フラグを指定してプログラムをコンパイルしてください。

#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 互換のベクトル検索を使用する」をご参照ください。