Back to Mem0

pgvector

docs/components/vectordbs/dbs/pgvector.mdx

2.0.106.6 KB
Original Source

pgvector is an open-source vector similarity search extension for Postgres. After connecting to Postgres, run CREATE EXTENSION IF NOT EXISTS vector; to create the vector extension.

Usage

<CodeGroup> ```python Python import os from mem0 import Memory

os.environ["OPENAI_API_KEY"] = "sk-xx"

config = { "vector_store": { "provider": "pgvector", "config": { "user": "test", "password": "123", "host": "127.0.0.1", "port": "5432", }, } }

m = Memory.from_config(config) messages = [ {"role": "user", "content": "I'm planning to watch a movie tonight. Any recommendations?"}, {"role": "assistant", "content": "How about thriller movies? They can be quite engaging."}, {"role": "user", "content": "I'm not a big fan of thriller movies but I love sci-fi movies."}, {"role": "assistant", "content": "Got it! I'll avoid thriller recommendations and suggest sci-fi movies in the future."}, ] m.add(messages, user_id="alice", metadata={"category": "movies"})


```typescript TypeScript
import { Memory } from "mem0ai/oss";

const config = {
  vectorStore: {
    provider: "pgvector",
    config: {
      collectionName: "memories",
      embeddingModelDims: 1536,
      connectionString: "postgresql://test:123@localhost:5432/vector_store",
      diskann: false, // Optional, requires pgvectorscale extension
      hnsw: false, // Optional, for HNSW indexing
    },
  },
};

const memory = new Memory(config);
const messages = [
  { role: "user", content: "I'm planning to watch a movie tonight. Any recommendations?" },
  { role: "assistant", content: "How about thriller movies? They can be quite engaging." },
  { role: "user", content: "I'm not a big fan of thriller movies but I love sci-fi movies." },
  { role: "assistant", content: "Got it! I'll avoid thriller recommendations and suggest sci-fi movies in the future." },
];

await memory.add(messages, { userId: "alice", metadata: { category: "movies" } });
</CodeGroup>

Config

Here are the parameters available for configuring pgvector:

ParameterSDKDescriptionDefault Value
connectionStringTypeScript OSSPostgreSQL connection string for direct connections. When set, Mem0 connects to the target database directly and skips the bootstrap postgres database flow.None
sslTypeScript OSSSSL option passed directly to pg, either true or an SSL config object, for both connectionString and split-field connections.None
dbnameTypeScript OSSSplit-field database name. This is only used when connectionString is absent.vector_store
collectionNameTypeScript OSSCollection name.memories
embeddingModelDimsTypeScript OSSDimensions of the embedding model.Required
userTypeScript OSS + PythonDatabase user for split-field connections.None
passwordTypeScript OSS + PythonDatabase password for split-field connections.None
hostTypeScript OSS + PythonDatabase host for split-field connections.None
portTypeScript OSS + PythonDatabase port for split-field connections.None
diskannTypeScript OSS + PythonWhether to use DiskANN for vector similarity search, requires pgvectorscale.False
hnswTypeScript OSS + PythonWhether to use HNSW for vector similarity search.TypeScript OSS: False, Python: True
connection_stringPython onlyPostgreSQL connection string, overrides individual connection parameters.None
sslmodePython onlySSL mode for PostgreSQL connections, such as require, prefer, or disable.None
connection_poolPython onlypsycopg connection pool object, overrides connection string and individual connection parameters.None

TypeScript OSS: Use connectionString plus optional ssl for managed Postgres setups. If you omit connectionString, Mem0 falls back to split fields and uses dbname, user, password, host, port, and optional ssl.

Python: The Python SDK uses snake_case keys such as connection_string, sslmode, collection_name, and embedding_model_dims.

Python connection priority:

  1. connection_pool (highest priority)
  2. connection_string
  3. Individual connection parameters (user, password, host, port, sslmode)