| command to run to activate pgvector extgension which is required to create a vector store on supabase | |
| note: change the embedding size to your model here it is 1536 | |
| [ref](https://js.langchain.com/docs/integrations/vectorstores/supabase/) | |
| ``` | |
| -- Enable the pgvector extension to work with embedding vectors | |
| create extension vector; | |
| -- Create a table to store your documents | |
| create table documents ( | |
| id bigserial primary key, | |
| content text, -- corresponds to Document.pageContent | |
| metadata jsonb, -- corresponds to Document.metadata | |
| embedding vector(1536) -- 1536 works for OpenAI embeddings, change if needed | |
| ); | |
| -- Create a function to search for documents | |
| create function match_documents ( | |
| query_embedding vector(1536), | |
| match_count int DEFAULT null, | |
| filter jsonb DEFAULT '{}' | |
| ) returns table ( | |
| id bigint, | |
| content text, | |
| metadata jsonb, | |
| embedding jsonb, | |
| similarity float | |
| ) | |
| language plpgsql | |
| as $$ | |
| #variable_conflict use_column | |
| begin | |
| return query | |
| select | |
| id, | |
| content, | |
| metadata, | |
| (embedding::text)::jsonb as embedding, | |
| 1 - (documents.embedding <=> query_embedding) as similarity | |
| from documents | |
| where metadata @> filter | |
| order by documents.embedding <=> query_embedding | |
| limit match_count; | |
| end; | |
| $$; | |
| ``` |