ベクトルエンジン最適化機能を有効にすると、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 互換のベクトル検索を使用する」をご参照ください。