通过SQL访问向量数据库
更新时间:
开启向量引擎优化功能后,您可以通过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版向量数据库可以使用libpg库连接,并使用C语言代码导入和查询向量数据。libpg连接数据库的操作,请参见libpq。
通过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兼容模式使用指南。
文档内容是否对您有帮助?