Skip to main content

GalaxDB Python client -- SQL, vector search, and local embeddings in one database

Project description

galaxdb-client

The Python client for GalaxDB -- an AI-native database that combines SQL, vector search, and local embeddings in a single binary.

No external API keys. No separate vector database. No data pipeline. One connection string.

Installation

pip install galaxdb-client

Requires Python 3.9+. Pre-built wheels for Linux x86_64, macOS Intel, macOS Apple Silicon, and Windows x86_64.

What GalaxDB gives you

  • Full SQL -- CREATE, INSERT, UPDATE, DELETE, SELECT with WHERE filters
  • Local embeddings -- text to vector conversion runs inside the process, no API key needed
  • Semantic search -- SEMANTIC_MATCH(col, 'query', threshold) in any WHERE clause; add LIMIT n for the n nearest matches
  • HNSW vector index -- recall@10 = 0.990 on SIFT-1M at ef=200
  • Time-travel queries -- SELECT ... AT VERSION 'tag' to query historical snapshots
  • Training export -- CREATE VERSION TAG ... FOR TRAINING exports a Lance dataset, zero-copy PyTorch-ready
  • Near-dedup -- WHERE NOT DUPLICATE removes near-duplicate rows using MinHash LSH
  • Crash safety -- WAL + checksum, 7 chaos scenarios pass in under 11 seconds
  • Encryption at rest -- AES-256-GCM on every block and WAL record

Quick start -- embedded mode (no server)

import galaxdb

# Open or create a database at a local path
db = galaxdb.Database("/tmp/mydb")

# Create a table
db.execute("CREATE TABLE products (id INT PRIMARY KEY, name TEXT, price INT)")

# Insert rows
db.execute("INSERT INTO products (id, name, price) VALUES (1, 'Laptop', 1200)")
db.execute("INSERT INTO products (id, name, price) VALUES (2, 'Headphones', 150)")
db.execute("INSERT INTO products (id, name, price) VALUES (3, 'Keyboard', 80)")

# Query with filter
rows = db.execute("SELECT * FROM products WHERE price > 100")
for row in rows:
    print(row)
# {'id': '1', 'name': 'Laptop', 'price': '1200'}
# {'id': '2', 'name': 'Headphones', 'price': '150'}

# Update
db.execute("UPDATE products SET price = 1100 WHERE id = 1")

# Delete
db.execute("DELETE FROM products WHERE id = 3")

# Table info
print(db.table_exists("products"))  # True
print(db.table_count)               # 1

Semantic search with local embeddings

Start the server with the embedding sidecar to enable SEMANTIC_MATCH:

galaxdb-server \
  --data-dir ./data \
  --port 5433 \
  --sidecar /usr/local/bin/galaxdb-sidecar \
  --model sentence-transformers/all-MiniLM-L6-v2

Then connect from Python:

import galaxdb

conn = galaxdb.connect("host=localhost port=5433 dbname=galaxdb sslmode=disable")

# Create a table with an embedding column
conn.execute("""
    CREATE TABLE docs (
        id   INT PRIMARY KEY,
        body TEXT EMBEDDING MODEL 'sentence-transformers/all-MiniLM-L6-v2' DIM 384
    )
""")

# Insert rows -- embeddings are computed automatically by the local sidecar
conn.execute("INSERT INTO docs (id, body) VALUES (1, 'machine learning and neural networks')")
conn.execute("INSERT INTO docs (id, body) VALUES (2, 'rust programming language systems')")
conn.execute("INSERT INTO docs (id, body) VALUES (3, 'cooking recipes italian pasta')")
conn.execute("INSERT INTO docs (id, body) VALUES (4, 'deep learning transformers attention')")

# Semantic search -- no external API, no separate vector DB
rows = conn.execute(
    "SELECT id, body FROM docs WHERE SEMANTIC_MATCH(body, 'artificial intelligence', 0.4)"
)
for row in rows:
    print(row)
# Returns rows 1 and 4 -- the AI/ML related documents

# SEMANTIC_MATCH is a top-k search. Without a LIMIT it returns the 10
# nearest matches; add LIMIT to control how many come back:
rows = conn.execute(
    "SELECT id, body FROM docs WHERE SEMANTIC_MATCH(body, 'artificial intelligence', 0.3) LIMIT 50"
)

conn.close()

Time-travel queries

# Create a named snapshot
conn.execute("CREATE VERSION TAG 'v1' FOR TRAINING WITH TRAINING PRECISION 'float32'")

# Insert more data after the snapshot
conn.execute("INSERT INTO docs (id, body) VALUES (5, 'new document added later')")

# Query the snapshot -- only sees data from before the tag
rows = conn.execute("SELECT * FROM docs AT VERSION 'v1'")
# Returns rows 1-4, not row 5

Training export

import galaxdb
import lance
import torch

db = galaxdb.Database("./data")

# Create a training snapshot
db.execute("CREATE VERSION TAG 'train-v1' FOR TRAINING WITH TRAINING PRECISION 'float32'")

# Export as a Lance dataset
path = db.training_dataset("train-v1")

# Load into PyTorch -- zero-copy, memory-mapped
dataset = lance.dataset(path).to_pytorch()
loader = torch.utils.data.DataLoader(dataset, batch_size=32)

Bulk insert

conn.execute("""
    BULK INSERT INTO products (id, name, price) VALUES
      (10, 'Monitor', 400),
      (11, 'Mouse', 30),
      (12, 'Webcam', 90)
""")

Near-duplicate deduplication

# Select only unique documents (one per near-duplicate cluster)
rows = conn.execute("SELECT * FROM docs WHERE NOT DUPLICATE")

Backup and restore

conn.execute("BACKUP TO '/path/to/backup'")
conn.execute("RESTORE FROM '/path/to/backup'")

Server mode -- connect to a running GalaxDB server

import galaxdb

# Connect using a PostgreSQL-style connection string
conn = galaxdb.connect("host=localhost port=5433 dbname=galaxdb sslmode=disable")

conn.execute("CREATE TABLE users (id INT PRIMARY KEY, name TEXT, age INT)")
conn.execute("INSERT INTO users (id, name, age) VALUES (1, 'Alice', 30)")

rows = conn.execute("SELECT * FROM users WHERE age > 25")
for row in rows:
    print(row)

conn.close()

Any PostgreSQL client works -- psycopg2, SQLAlchemy, tokio-postgres, pg (Node.js), JDBC.

Docker

docker run -d -p 5433:5433 -p 9090:9090 \
  -v /data:/data \
  -v ~/.cache/huggingface:/root/.cache/huggingface \
  harbi256/galaxdb:latest \
  --data-dir /data \
  --sidecar /usr/local/bin/galaxdb-sidecar \
  --model sentence-transformers/all-MiniLM-L6-v2

Observability

# Health check
curl http://localhost:9090/health
# {"status":"ok","version":"0.4.0","subsystems":{"sidecar_healthy":true}}

# Prometheus metrics
curl http://localhost:9090/metrics

Links

License

Apache 2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

galaxdb_client-0.5.0.tar.gz (698.0 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

galaxdb_client-0.5.0-cp312-cp312-manylinux_2_28_x86_64.whl (30.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

galaxdb_client-0.5.0-cp312-cp312-manylinux_2_28_aarch64.whl (27.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

galaxdb_client-0.5.0-cp311-cp311-win_amd64.whl (25.8 MB view details)

Uploaded CPython 3.11Windows x86-64

galaxdb_client-0.5.0-cp311-cp311-macosx_11_0_arm64.whl (25.1 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

galaxdb_client-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl (26.9 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

Details for the file galaxdb_client-0.5.0.tar.gz.

File metadata

  • Download URL: galaxdb_client-0.5.0.tar.gz
  • Upload date:
  • Size: 698.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for galaxdb_client-0.5.0.tar.gz
Algorithm Hash digest
SHA256 0a0d8ef3c08df353f009e5d9fc5b9d1be36c71aefc144490abfb9dea478f5f05
MD5 a75f9897b44685dd24ee4378cbf06fe3
BLAKE2b-256 7b498cea1f53eaf23449081dfa54acd2729c097e7d12a01ce6b1d7ded28d4614

See more details on using hashes here.

File details

Details for the file galaxdb_client-0.5.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for galaxdb_client-0.5.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 07572316a670aa803f1dca5665bdfb85f51e0b4472ab981a730d0582470e0d84
MD5 1eab2f27c0249af4605dba80f7617cce
BLAKE2b-256 419e661c4f911a2406db615a2f3729bad8be476cf828e8fc0ab3849798e58940

See more details on using hashes here.

File details

Details for the file galaxdb_client-0.5.0-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for galaxdb_client-0.5.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ee97fa426a7e051a580aeca1f62131fa62e78caf8fc902ddfa1ba0387ace751f
MD5 3d2d7b35953e0180534cdefdc490e00a
BLAKE2b-256 7dca5898022fdef61cf70fef916365da537dacfff3d43cd4664c04589acbc919

See more details on using hashes here.

File details

Details for the file galaxdb_client-0.5.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for galaxdb_client-0.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 5b173f7c0039dd438e9fa90bc4e7d482332cbba645ba93b7ac999ee403b1cbf9
MD5 3e8930bcbf13ccf11b0e8d8fb469733e
BLAKE2b-256 c87943e6018076294049cdcda0335b4cd4f4659e0583f95eb72d6ef3a2aaa5b9

See more details on using hashes here.

File details

Details for the file galaxdb_client-0.5.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for galaxdb_client-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7bf23beef206162faecafad863b9973acc162cd23b2f1e3a0130667188458a23
MD5 4b95e3352cea0714ab101fcacc9df527
BLAKE2b-256 e09552e47e6c0e919c2685dcb68c5f075038e790732934a4bb83803371b487c5

See more details on using hashes here.

File details

Details for the file galaxdb_client-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for galaxdb_client-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c2b95bc3bd06795b14e42e2bc2e5ab36b62052b61c028511f9cf093db41197bd
MD5 c1b86d43f7f921f543cfca4463d802e6
BLAKE2b-256 e13d872f6c47e571f7955c32c195648bec26088a7357d5af55bf6d3833cd36c2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page