Struct PostgresVectorStore

Source
pub struct PostgresVectorStore { /* private fields */ }
Expand description

§PostgresVectorStore

This is the implementation of EmbeddingStore for a Postgres database with the pgvector extension enabled. This store takes a table name and an embedding model. If a table already exists with the same name and does not have the expected columns any calls to PostgresVectorStore::store or PostgresVectorStore::store_batch will fail.

§Required Environment Variables

  • POSTGRES_USERNAME: The username to connect to the database with
  • POSTGRES_PASSWORD: The password to connect to the database with
  • POSTGRES_HOST: The host to connect to the database with
  • POSTGRES_DATABASE: The database to connect with

§Output table format

Columns: | id (int) | content (text) | embedding (vector) | metadata (jsonb) |

§Examples

use rag_toolchain::stores::*;
use rag_toolchain::common::*;

async fn store(embeddings: Vec<Embedding>) {
    let embedding_model: OpenAIEmbeddingModel = OpenAIEmbeddingModel::TextEmbedding3Small;
    let table_name: &str = "table_name";
    let store: PostgresVectorStore = PostgresVectorStore::try_new(table_name, embedding_model)
        .await.unwrap();
    store.store_batch(embeddings).await.unwrap();
}

Implementations§

Source§

impl PostgresVectorStore

Source

pub async fn try_new( table_name: &str, embedding_model: impl EmbeddingModel, ) -> Result<Self, PostgresVectorStoreError>

§PostgresVectorStore::try_new

This constructor is used to create a new PostgresVectorStore. It will read the required environment variables in. Try and connect to your postgres database and then create a table with the given name and the expected columns. If the table already exists with the same name it will not be re-created.

§Arguments
  • table_name: &str - The name of the table to store the embeddings in.
  • embedding_model: impl EmbeddingModel - The embedding model to use to store the embeddings
§Errors
  • [PostgresVectorError::EnvVarError] if the required environment variables are not set.
  • [PostgresVectorError::ConnectionError] if the connection to the database could not be established.
  • [PostgresVectorError::TableCreationError] if the table could not be created.
§Returns
Source

pub async fn try_new_with_pool( pool: Pool<Postgres>, table_name: &str, embedding_model: impl EmbeddingModel, ) -> Result<Self, PostgresVectorStoreError>

§PostgresVectorStore::try_new_with_pool

This is an alternative constructor that allows you to pass in a connection pool. This was added as it may be the case people want to establish one connection pool and then shared it across multiple PostgresVectorStores managing different tables.

§Arguments
  • pool: sqlx::Pool<Postgres> - a pre established connection pool.
  • table_name: &str - The name of the table to store the embeddings in.
  • embedding_model: implEmbeddingModel - The embedding model used for the genrated embeddings.
§Errors
  • [PostgresVectorError::TableCreationError] if the table could not be created
§Returns
Source

pub fn get_pool(&self) -> Pool<Postgres>

§PostgresVectorStore::get_pool

Getter for the internal connection pool. This is useful if you want to do any further operations on the database such as enabling an index on the table.

§Returns
  • Pool - The connection pool
Source

pub fn as_retriever<T: AsyncEmbeddingClient>( &self, embedding_client: T, distance_function: DistanceFunction, ) -> PostgresVectorRetriever<T>

§PostgresVectorStore::as_retriever

This function allows us to convert the store into a retriever. Note that the returned retriever is bound to the same table as the store.

§Arguments
  • embedding_client: AsyncEmbeddingClient - The client we use to embed ` income text before the similarity search.
  • distance_function: DistanceFunction - The distance function to use to compare the embeddings
§Returns

PostgresVectorRetriever - The retriever that can be used to search for similar text.

Trait Implementations§

Source§

impl Clone for PostgresVectorStore

Source§

fn clone(&self) -> PostgresVectorStore

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PostgresVectorStore

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EmbeddingStore for PostgresVectorStore

Source§

async fn store( &self, embedding: Embedding, ) -> Result<(), PostgresVectorStoreError>

§PostgresVectorStore::store

This is done as a single insert statement.

§Arguments
§Errors
  • [PostgresVectorError::InsertError] if the insert fails
§Returns
  • [()] if the insert succeeds
Source§

async fn store_batch( &self, embeddings: Vec<Embedding>, ) -> Result<(), PostgresVectorStoreError>

§PostgresVectorStore::store_batch

This is done as a single transaction with multiple insert statements.

§Arguments
§Errors
  • [PostgresVectorError::TransactionError] if the transaction fails
§Returns
  • [()] if the transaction succeeds
Source§

type ErrorType = PostgresVectorStoreError

The custom error type for the store

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,