Use the vector extension, version 0.5.0.google-1 or later, which includes
pgvector functions and operators, to store generated embeddings as vector values. This
is a version of pgvector that Google has extended with optimizations specific
to AlloyDB.
CREATEEXTENSIONIFNOTEXISTSvector;
Store generated embeddings
Ensure that you have already created a table in your AlloyDB database.
To store vector embeddings, do the following:
Create a vector[] column in your table to store your embeddings:
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-25 UTC."],[[["\u003cp\u003eThis guide demonstrates how to utilize AlloyDB as a vector database by leveraging the \u003ccode\u003evector\u003c/code\u003e extension, which incorporates \u003ccode\u003epgvector\u003c/code\u003e functions for storing embeddings.\u003c/p\u003e\n"],["\u003cp\u003eYou must use the \u003ccode\u003evector\u003c/code\u003e extension, specifically version \u003ccode\u003e0.5.0.google-1\u003c/code\u003e or later, which includes Google-optimized \u003ccode\u003epgvector\u003c/code\u003e functionalities for storing embeddings as \u003ccode\u003evector\u003c/code\u003e values.\u003c/p\u003e\n"],["\u003cp\u003eTo store embeddings, create a \u003ccode\u003evector[]\u003c/code\u003e column in your database table with the correct dimensions supported by your chosen model, for example, 768 for text-embedding-005.\u003c/p\u003e\n"],["\u003cp\u003eEmbeddings can be copied to the newly created vector column using the \u003ccode\u003eCOPY\u003c/code\u003e command from a CSV file that stores your vectors.\u003c/p\u003e\n"],["\u003cp\u003eAfter storing embeddings, you can enhance query performance by creating indexes with either the \u003ccode\u003evector\u003c/code\u003e or \u003ccode\u003ealloydb_scann\u003c/code\u003e extension.\u003c/p\u003e\n"]]],[],null,["# Store vector embeddings\n\nSelect a documentation version: 16.3.0keyboard_arrow_down\n\n- [Current (16.8.0)](/alloydb/omni/current/docs/ai/store-embeddings)\n- [16.8.0](/alloydb/omni/16.8.0/docs/ai/store-embeddings)\n- [16.3.0](/alloydb/omni/16.3.0/docs/ai/store-embeddings)\n- [15.12.0](/alloydb/omni/15.12.0/docs/ai/store-embeddings)\n- [15.7.1](/alloydb/omni/15.7.1/docs/ai/store-embeddings)\n- [15.7.0](/alloydb/omni/15.7.0/docs/ai/store-embeddings)\n\n\u003cbr /\u003e\n\nThis page shows you how to use AlloyDB as a vector database with the `vector` extension that includes `pgvector` functions and operators. These functions and operators let you store embeddings as vector values.\n\n\u003cbr /\u003e\n\nRequired database extension\n---------------------------\n\nUse the `vector` extension, version `0.5.0.google-1` or later, which includes\n`pgvector` functions and operators, to store generated embeddings as `vector` values. This\nis a version of `pgvector` that Google has extended with optimizations specific\nto AlloyDB. \n\n CREATE EXTENSION IF NOT EXISTS vector;\n\nStore generated embeddings\n--------------------------\n\nEnsure that you have already created a table in your AlloyDB database.\n| **Note:** If your application uses the LangChain framework and your dataset has `O(100k)` embeddings, we recommend that you use the `AlloyDBVectorStore` vector class included in the AlloyDB LangChain library to store your embeddings. For more information, see [Build LLM-powered applications using\n| LangChain](/alloydb/docs/ai/langchain#vector_store_procedure_guide).\n\nTo store vector embeddings, do the following:\n\n1. Create a `vector[]` column in your table to store your embeddings:\n\n ALTER TABLE \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-k\"\u003eTABLE\u003c/span\u003e\u003c/var\u003e ADD COLUMN \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eEMBEDDING_COLUMN\u003c/span\u003e\u003c/var\u003e vector(\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eDIMENSIONS\u003c/span\u003e\u003c/var\u003e);\n\n Replace the following:\n - \u003cvar translate=\"no\"\u003eTABLE\u003c/var\u003e: the table name\n\n - \u003cvar translate=\"no\"\u003eEMBEDDING_COLUMN\u003c/var\u003e: the name of the new embedding column\n\n - \u003cvar translate=\"no\"\u003eDIMENSIONS\u003c/var\u003e: the number of dimensions that the model\n supports.\n\n For example, if you are using one of the `text-embedding`English models---for example, `text-embedding-005` with Vertex AI, specify `768`.\n2. Copy the vectors to the vector column. The following example assumes your embeddings are available in a CSV file:\n\n COPY \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-k\"\u003eTABLE\u003c/span\u003e\u003c/var\u003e (\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eEMBEDDING_COLUMN\u003c/span\u003e\u003c/var\u003e) FROM '\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003ePATH_TO_VECTOR_CSV\u003c/span\u003e\u003c/var\u003e (FORMAT CSV);\n\n Replace the following:\n - \u003cvar translate=\"no\"\u003ePATH_TO_VECTOR_CSV\u003c/var\u003e: the full path of where you have stored your `.csv` file.\n\nAfter you store the embeddings, you can use the `vector` extension or the `alloydb_scann`\nextension to create indexes for faster query performance.\n\nWhat's next\n-----------\n\n- [Create indexes and query vectors](/alloydb/omni/16.3.0/docs/ai/store-index-query-vectors)\n- [An example embedding workflow](/alloydb/omni/16.3.0/docs/ai/example-embeddings)"]]