Psycopg3¶
This example uses Psycopg3 directly. AkasicDB vector types must be registered for parameter binding and result conversion; call register_vector() for this.
Install¶
Example¶
import psycopg
from akasicdb.psycopg import register_vector
from akasicdb.types import Hnsw, IndexOption
DB_URL = "postgresql://postgres:mysecretpassword@localhost:5432/postgres"
with psycopg.connect(DB_URL) as conn:
conn.execute("CREATE EXTENSION IF NOT EXISTS akasicdb")
conn.execute("SELECT akasicdb_admin.initialize()")
register_vector(conn)
conn.execute("DROP TABLE IF EXISTS documents")
conn.execute("""
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
text TEXT NOT NULL,
embedding vector(3) NOT NULL
)
""")
conn.execute(
"INSERT INTO documents (text, embedding) VALUES (%s, %s)",
("hello world", [1.0, 2.0, 3.0]),
)
conn.execute(
"INSERT INTO documents (text, embedding) VALUES (%s, %s)",
("hello akasicdb", [1.0, 3.0, 4.0]),
)
conn.execute(
"CREATE INDEX embedding_idx ON documents USING vectoron "
"(embedding vector_l2_ops) WITH (options=$${}$$)".format(
IndexOption(index=Hnsw(), threads=1).dumps()
)
)
rows = conn.execute(
"SELECT text, embedding <-> %s AS distance "
"FROM documents ORDER BY distance LIMIT 5",
([1.0, 2.0, 3.5],),
).fetchall()
for row in rows:
print(row)
conn.commit()
psycopg.connect() expects a Psycopg connection URL such as postgresql://....