Skip to main content

Python SDK for Apache AGE + pgvector — graph and vector queries on PostgreSQL

Project description

Piggie

PyPI version Python versions License

One PostgreSQL instance replaces your graph database, your vector database, and your ETL pipeline.

Piggie is a Python SDK for Apache AGE + pgvector on PostgreSQL. Cypher graph queries, vector similarity search, and hybrid graph+vector operations — all through a single connection string, with no vendor lock-in.

┌──────────────────────────────────────────────────┐
│                  Your Application                 │
├──────────────────────────────────────────────────┤
│              Piggie SDK (Python)                  │
│  Cypher │ SQL │ Vector Search │ Hybrid │ KM API  │
├──────────────────────────────────────────────────┤
│                  PostgreSQL                       │
│  Apache AGE     │  pgvector    │  Core SQL       │
│  (graphs)       │  (vectors)   │  (relational)   │
└──────────────────────────────────────────────────┘

Quick Start

# Start the database (Docker, any platform, ARM + x86)
git clone https://github.com/gregfelice/tomo.git && cd piggie
docker compose up -d

# Install the SDK
pip install piggie
import piggie

db = piggie.connect("postgresql://piggie:piggie@localhost:5488/piggie", graph="my_graph")

# Cypher queries → DataFrames
df = db.cypher("MATCH (n:Person) RETURN n.name, n.age").to_df()

# Vector search
results = db.vector_search("documents", "embedding", query_vec, k=10).to_df()

# Hybrid: graph traversal + vector similarity
results = db.hybrid_search(
    cypher="MATCH (p:Paper)-[:CITES]->(cited) RETURN cited",
    vector_table="papers",
    vector_column="abstract_embedding",
    query_vector=query_vec,
    k=10,
).to_df()

Installation

pip install piggie

# With pandas support
pip install piggie[pandas]

# With all optional dependencies
pip install piggie[all]

Database Setup

Piggie requires PostgreSQL with Apache AGE (graph) and pgvector (vectors).

Docker (recommended) — multi-arch image (ARM + x86), hardened config, everything pre-configured:

docker compose up -d

Verify the stack:

python docker/smoke-test.py

Other platforms: See the Install Database guide for Ubuntu, macOS, Fedora, and from-source instructions.

Cloud deployment: Terraform modules for AWS, GCP, Azure, DigitalOcean, and Hetzner — one terraform apply and you're running.

Docker Image

The piggie/db image ships PostgreSQL 18 + Apache AGE 1.7.0 + pgvector 0.8.2 with:

  • Multi-arch: linux/amd64 + linux/arm64 (native on Apple M-series, AWS Graviton)
  • scram-sha-256 authentication (no trust or md5)
  • TLS enabled with self-signed cert (replace for production)
  • Audit logging for connections, disconnections, and DDL
  • Minimal attack surface — multi-stage build, no build tools in runtime

Benchmarks

We benchmarked AGE + pgvector against Neo4j, Kuzu, and NebulaGraph across 12 workloads at three scales (10K, 100K, 1M). AGE won all 12 workloads at every scale. At 1M nodes:

Workload AGE Neo4j Speedup
Point Lookup 0.29ms 0.97ms 3x
Pattern Match 0.14ms 1.8ms 13x
VLE Traversal 0.18ms 0.62ms 3x
Concurrent Queries 52ms 1,323ms 25x
Bulk Load 59ms 133ms 2x

The Piggie SDK also won 14/16 algorithm benchmarks against Neo4j GDS, using igraph (C) and networkit (C++) backends.

Read the full analysis: Can One PostgreSQL Replace Your Graph Database and Your Vector Database?

Graph Algorithms

19 algorithms across 7 categories with automatic backend selection:

# Auto-selects igraph C backend
df = db.centrality(measure="betweenness")

# Auto-selects networkit C++ backend
df = db.centrality(measure="closeness")

# Community detection
df = db.communities(method="louvain")

Backends: igraph (C), networkit (C++), NetworkX (Python). The SDK detects installed backends and routes each algorithm to the fastest available implementation.

Integrations

  • LangChainPiggieVectorStore and PiggieGraphStore for RAG pipelines
  • LlamaIndexPiggieGraphStore (triplets) and PiggiePropertyGraphStore (labeled property graph)
  • NetworkXto_networkx() conversion + built-in PageRank, community detection, shortest path, centrality
  • PyTorch GeometricFeatureStore and GraphStore for GNN training on AGE data

Notebooks

Notebook Description
Quickstart Getting started with Piggie
Hybrid Search Graph + vector search combined
Bulk Load Bulk load and export
Algorithms Graph algorithms with igraph/networkit backends
RAG Pipeline RAG with LlamaIndex and LangChain
GNN Training GNN training with PyTorch Geometric

Documentation

Security

See SECURITY.md for vulnerability disclosure policy and security model.

Community

Requirements

  • Python 3.10+
  • PostgreSQL 16–18 with Apache AGE and pgvector extensions (or use the Docker image)

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

tomo_sdk-1.0.0.tar.gz (1.4 MB view details)

Uploaded Source

Built Distribution

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

tomo_sdk-1.0.0-py3-none-any.whl (117.8 kB view details)

Uploaded Python 3

File details

Details for the file tomo_sdk-1.0.0.tar.gz.

File metadata

  • Download URL: tomo_sdk-1.0.0.tar.gz
  • Upload date:
  • Size: 1.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"25.10","id":"questing","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for tomo_sdk-1.0.0.tar.gz
Algorithm Hash digest
SHA256 9390151a5bc50fad32db113ab06b27f18f97294d0fc9a9a95327f86aa6368566
MD5 38931b084ba10a4d4376717f5b4ca8dc
BLAKE2b-256 c44463dd05eb92f1797b9b074b29e06c85f6778d3ac02e4efec3d8f73e2e41b7

See more details on using hashes here.

File details

Details for the file tomo_sdk-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: tomo_sdk-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 117.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"25.10","id":"questing","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for tomo_sdk-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d7310347a2c6b0d97b1ffc139a86d790b881437d55cd64477a1eba004a9ef909
MD5 c12333a8a246647c2a51613d176e903f
BLAKE2b-256 672f10e1a3cf276f11d9a06685dfb7328c0d3225ab556a06f577a892765b3219

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