Sign inSign up

zachbg/pgvector-ready

By zachbg

•Updated 6 months ago

PostgreSQL 17 with pgvector and PostGIS pre-installed for AI vector search

Image
1

2.1K

zachbg/pgvector-ready repository overview

⁠pgvector-ready

PostgreSQL + pgvector, pre-configured and optimized for AI/RAG workloads.

Docker Image Docker Pulls

⁠Why?

Setting up PostgreSQL + pgvector for AI apps requires:

  1. Installing the extension
  2. Tuning PostgreSQL for vector workloads
  3. Creating indexes with the right parameters
  4. Knowing the right SQL patterns

pgvector-ready does all of this out of the box.

⁠Quick Start

docker run -d \
  --name pgvector \
  -p 5432:5432 \
  -e POSTGRES_PASSWORD=secret \
  -v pgdata:/var/lib/postgresql/data \
  zachbg/pgvector-ready

⁠Docker Compose (AI Stack)

services:
  db:
    image: zachbg/pgvector-ready
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: ragapp
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data

  ollama:
    image: ollama/ollama
    volumes:
      - ollama:/root/.ollama

volumes:
  pgdata:
  ollama:

⁠What's Included

⁠Extensions
  • pgvector — vector similarity search
  • pg_stat_statements — query performance monitoring
  • pg_trgm — trigram text search
  • PostGIS — geospatial (available, not auto-enabled)
⁠Optimized Config
  • Memory tuned for vector operations (work_mem=256MB)
  • Parallel query enabled (4 workers per gather)
  • WAL optimized for write-heavy vector ingestion
  • Slow query logging (>1s)
⁠Pre-built Schema
  • documents table with vector(1536) column (OpenAI-compatible)
  • HNSW index for fast cosine similarity search
  • Full-text trigram search index
  • JSONB metadata with GIN index
  • match_embeddings() convenience function

⁠Usage Examples

⁠Store Embeddings
INSERT INTO documents (content, metadata, embedding)
VALUES (
  'PostgreSQL is a powerful database',
  '{"source": "docs", "page": 1}',
  '[0.1, 0.2, ...]'::vector
);
-- Find 10 most similar documents
SELECT id, content, 1 - (embedding <=> '[0.1, 0.2, ...]'::vector) AS similarity
FROM documents
ORDER BY embedding <=> '[0.1, 0.2, ...]'::vector
LIMIT 10;
⁠Using the Convenience Function
SELECT * FROM match_embeddings(
  '[0.1, 0.2, ...]'::vector,
  'documents',
  'embedding',
  10,     -- top 10 results
  0.8     -- minimum similarity
);
⁠Different Dimensions
-- For Ollama embeddings (varies by model)
ALTER TABLE documents ALTER COLUMN embedding TYPE vector(4096);

-- Rebuild index
DROP INDEX documents_embedding_idx;
CREATE INDEX documents_embedding_idx ON documents
  USING hnsw (embedding vector_cosine_ops);

⁠Tags

TagDescription
17PostgreSQL 17 + pgvector
16PostgreSQL 16 + pgvector
latestLatest PostgreSQL + pgvector

⁠License

MIT

Tag summary

Content type

Image

Digest

sha256:f4e853e1d…

Size

226.8 MB

Last updated

6 months ago

docker pull zachbg/pgvector-ready