# PGVector

> **Class** in `langchain_postgres`

📖 [View in docs](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector)

Postgres vector store integration.

## Signature

```python
PGVector(
    self,
    embeddings: Embeddings,
    *,
    connection: Union[None, DBConnection, Engine, AsyncEngine, str] = None,
    embedding_length: Optional[int] = None,
    collection_name: str = _LANGCHAIN_DEFAULT_COLLECTION_NAME,
    collection_metadata: Optional[dict] = None,
    distance_strategy: DistanceStrategy = DEFAULT_DISTANCE_STRATEGY,
    pre_delete_collection: bool = False,
    logger: Optional[logging.Logger] = None,
    relevance_score_fn: Optional[Callable[[float], float]] = None,
    engine_args: Optional[dict[str, Any]] = None,
    use_jsonb: bool = True,
    create_extension: bool = True,
    async_mode: bool = False,
)
```

## Description

**Setup:**

Install ``langchain_postgres`` and run the docker container.

.. code-block:: bash

    pip install -qU langchain-postgres
    docker run --name pgvector-container -e POSTGRES_USER=langchain -e POSTGRES_PASSWORD=langchain -e POSTGRES_DB=langchain -p 6024:5432 -d pgvector/pgvector:pg16

Key init args — indexing params:
    collection_name: str
        Name of the collection.
    embeddings: Embeddings
        Embedding function to use.

Key init args — client params:
    connection: Union[None, DBConnection, Engine, AsyncEngine, str]
        Connection string or engine.

**Instantiate:**

.. code-block:: python

from langchain_postgres.vectorstores import PGVector
from langchain_openai import OpenAIEmbeddings

# See docker command above to launch a postgres instance with pgvector enabled.
connection = "postgresql+psycopg://langchain:langchain@localhost:6024/langchain"  # Uses psycopg3!
collection_name = "my_docs"

vector_store = PGVector(
    embeddings=OpenAIEmbeddings(model="text-embedding-3-large"),
    collection_name=collection_name,
    connection=connection,
    use_jsonb=True,
)

**Add Documents:**

.. code-block:: python

from langchain_core.documents import Document

document_1 = Document(page_content="foo", metadata={"baz": "bar"})
document_2 = Document(page_content="thud", metadata={"bar": "baz"})
document_3 = Document(page_content="i will be deleted :(")

documents = [document_1, document_2, document_3]
ids = ["1", "2", "3"]
vector_store.add_documents(documents=documents, ids=ids)

**Delete Documents:**

.. code-block:: python

vector_store.delete(ids=["3"])

**Search:**

.. code-block:: python

    results = vector_store.similarity_search(query="thud",k=1)
    for doc in results:
        print(f"* {doc.page_content} [{doc.metadata}]")

.. code-block:: python

    * thud [{'bar': 'baz'}]

**Search with filter:**

.. code-block:: python

    results = vector_store.similarity_search(query="thud",k=1,filter={"bar": "baz"})
    for doc in results:
        print(f"* {doc.page_content} [{doc.metadata}]")

.. code-block:: python

    * thud [{'bar': 'baz'}]

**Search with score:**

.. code-block:: python

    results = vector_store.similarity_search_with_score(query="qux",k=1)
    for doc, score in results:
        print(f"* [SIM={score:3f}] {doc.page_content} [{doc.metadata}]")

.. code-block:: python

    * [SIM=0.499243] foo [{'baz': 'bar'}]

**Async:**

.. code-block:: python

    # add documents
    # await vector_store.aadd_documents(documents=documents, ids=ids)

    # delete documents
    # await vector_store.adelete(ids=["3"])

    # search
    # results = vector_store.asimilarity_search(query="thud",k=1)

    # search with score
    results = await vector_store.asimilarity_search_with_score(query="qux",k=1)
    for doc,score in results:
        print(f"* [SIM={score:3f}] {doc.page_content} [{doc.metadata}]")

.. code-block:: python

    * [SIM=0.499243] foo [{'baz': 'bar'}]

**Use as Retriever:**

.. code-block:: python

    retriever = vector_store.as_retriever(
        search_type="mmr",
        search_kwargs={"k": 1, "fetch_k": 2, "lambda_mult": 0.5},
    )
    retriever.invoke("thud")

.. code-block:: python

    [Document(metadata={'bar': 'baz'}, page_content='thud')]

## Parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `connection` | `Union[None, DBConnection, Engine, AsyncEngine, str]` | No | Postgres connection string or (async)engine. (default: `None`) |
| `embeddings` | `Embeddings` | Yes | Any embedding function implementing `langchain.embeddings.base.Embeddings` interface. |
| `embedding_length` | `Optional[int]` | No | The length of the embedding vector. (default: None) NOTE: This is not mandatory. Defining it will prevent vectors of any other size to be added to the embeddings table but, without it, the embeddings can't be indexed. (default: `None`) |
| `collection_name` | `str` | No | The name of the collection to use. (default: langchain) NOTE: This is not the name of the table, but the name of the collection. The tables will be created when initializing the store (if not exists) So, make sure the user has the right permissions to create tables. (default: `_LANGCHAIN_DEFAULT_COLLECTION_NAME`) |
| `distance_strategy` | `DistanceStrategy` | No | The distance strategy to use. (default: COSINE) (default: `DEFAULT_DISTANCE_STRATEGY`) |
| `pre_delete_collection` | `bool` | No | If True, will delete the collection if it exists. (default: False). Useful for testing. (default: `False`) |
| `engine_args` | `Optional[dict[str, Any]]` | No | SQLAlchemy's create engine arguments. (default: `None`) |
| `use_jsonb` | `bool` | No | Use JSONB instead of JSON for metadata. (default: True) Strongly discouraged from using JSON as it's not as efficient for querying. It's provided here for backwards compatibility with older versions, and will be removed in the future. (default: `True`) |
| `create_extension` | `bool` | No | If True, will create the vector extension if it doesn't exist. disabling creation is useful when using ReadOnly Databases. (default: `True`) |

## Extends

- `VectorStore`

## Constructors

```python
__init__(
    self,
    embeddings: Embeddings,
    *,
    connection: Union[None, DBConnection, Engine, AsyncEngine, str] = None,
    embedding_length: Optional[int] = None,
    collection_name: str = _LANGCHAIN_DEFAULT_COLLECTION_NAME,
    collection_metadata: Optional[dict] = None,
    distance_strategy: DistanceStrategy = DEFAULT_DISTANCE_STRATEGY,
    pre_delete_collection: bool = False,
    logger: Optional[logging.Logger] = None,
    relevance_score_fn: Optional[Callable[[float], float]] = None,
    engine_args: Optional[dict[str, Any]] = None,
    use_jsonb: bool = True,
    create_extension: bool = True,
    async_mode: bool = False,
) -> None
```

| Name | Type |
|------|------|
| `embeddings` | `Embeddings` |
| `connection` | `Union[None, DBConnection, Engine, AsyncEngine, str]` |
| `embedding_length` | `Optional[int]` |
| `collection_name` | `str` |
| `collection_metadata` | `Optional[dict]` |
| `distance_strategy` | `DistanceStrategy` |
| `pre_delete_collection` | `bool` |
| `logger` | `Optional[logging.Logger]` |
| `relevance_score_fn` | `Optional[Callable[[float], float]]` |
| `engine_args` | `Optional[dict[str, Any]]` |
| `use_jsonb` | `bool` |
| `create_extension` | `bool` |
| `async_mode` | `bool` |


## Properties

- `async_mode`
- `embedding_function`
- `collection_name`
- `collection_metadata`
- `pre_delete_collection`
- `logger`
- `override_relevance_score_fn`
- `session_maker`
- `use_jsonb`
- `create_extension`
- `embeddings`
- `distance_strategy`

## Methods

- [`create_vector_extension()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/create_vector_extension)
- [`acreate_vector_extension()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/acreate_vector_extension)
- [`create_tables_if_not_exists()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/create_tables_if_not_exists)
- [`acreate_tables_if_not_exists()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/acreate_tables_if_not_exists)
- [`drop_tables()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/drop_tables)
- [`adrop_tables()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/adrop_tables)
- [`create_collection()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/create_collection)
- [`acreate_collection()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/acreate_collection)
- [`delete_collection()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/delete_collection)
- [`adelete_collection()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/adelete_collection)
- [`delete()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/delete)
- [`adelete()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/adelete)
- [`get_collection()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/get_collection)
- [`aget_collection()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/aget_collection)
- [`add_embeddings()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/add_embeddings)
- [`aadd_embeddings()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/aadd_embeddings)
- [`add_texts()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/add_texts)
- [`aadd_texts()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/aadd_texts)
- [`similarity_search()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/similarity_search)
- [`asimilarity_search()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/asimilarity_search)
- [`similarity_search_with_score()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/similarity_search_with_score)
- [`asimilarity_search_with_score()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/asimilarity_search_with_score)
- [`similarity_search_with_score_by_vector()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/similarity_search_with_score_by_vector)
- [`asimilarity_search_with_score_by_vector()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/asimilarity_search_with_score_by_vector)
- [`similarity_search_by_vector()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/similarity_search_by_vector)
- [`asimilarity_search_by_vector()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/asimilarity_search_by_vector)
- [`from_texts()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/from_texts)
- [`afrom_texts()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/afrom_texts)
- [`from_embeddings()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/from_embeddings)
- [`afrom_embeddings()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/afrom_embeddings)
- [`from_existing_index()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/from_existing_index)
- [`afrom_existing_index()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/afrom_existing_index)
- [`get_connection_string()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/get_connection_string)
- [`from_documents()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/from_documents)
- [`afrom_documents()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/afrom_documents)
- [`connection_string_from_db_params()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/connection_string_from_db_params)
- [`max_marginal_relevance_search_with_score_by_vector()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/max_marginal_relevance_search_with_score_by_vector)
- [`amax_marginal_relevance_search_with_score_by_vector()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/amax_marginal_relevance_search_with_score_by_vector)
- [`max_marginal_relevance_search()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/max_marginal_relevance_search)
- [`amax_marginal_relevance_search()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/amax_marginal_relevance_search)
- [`max_marginal_relevance_search_with_score()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/max_marginal_relevance_search_with_score)
- [`amax_marginal_relevance_search_with_score()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/amax_marginal_relevance_search_with_score)
- [`max_marginal_relevance_search_by_vector()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/max_marginal_relevance_search_by_vector)
- [`amax_marginal_relevance_search_by_vector()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/amax_marginal_relevance_search_by_vector)
- [`get_by_ids()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/get_by_ids)
- [`aget_by_ids()`](https://reference.langchain.com/python/langchain-postgres/vectorstores/PGVector/aget_by_ids)

---

[View source on GitHub](https://github.com/langchain-ai/langchain-postgres/blob/9d819182da7e3fb1b815e6c9a6b7c2cd1eb4bc0e/langchain_postgres/vectorstores.py#L249)