練習 - 在 Azure PostgresQL 中設定 pgvector 擴充功能以搭配 Spring AI 使用
在此練習中,您會建立適用於PostgreSQL的 Azure 資料庫彈性伺服器實例、啟用 pgvector
擴充功能,以及建立必要的資料庫結構,以搭配 Spring AI VectorStore
抽象概念使用。
透過 Azure CLI 登入 Azure
使用下列命令登入 Azure:
az login
設定參數值
使用下列命令來設定一些環境變數。 這些值會傳遞至後續命令,以建立資料庫和必要資源。 請務必將 <...>
預留位置取代為您自己的值。 值 <server-name>
在所有 Azure 中都必須是全域唯一的。 一種簡單的方法來確保唯一性是使用你的姓名縮寫、今天的日期和一些標識符的組合,例如 abc-031325-spring-ai-postgresql-server。
export RESOURCE_GROUP=<resource-group>
export LOCATION=<location>
export DB_SERVER_NAME=<server-name>
接下來,使用下列命令將您的公用IP位址儲存在環境變數中,並在控制台中顯示它。 您稍後在此單元中使用此值來限制對 PostgreSQL 伺服器外部 IP 位址的存取。 藉由使用您正在使用之電腦的公用IP位址,只有您的IP位址可以存取伺服器。
export PUBLIC_IP=$(curl -s ipinfo.io/ip)
echo "Start IP: $PUBLIC_IP"
此命令應該在大部分的Linux發行版和 Git Bash 中運作。 如果無法成功,您可以選擇使用https://whatismyipaddress.com/來取得您的公用IP位址。
備註
您的IP位址可能會變更。 如果變更,您必須據以更新對應的防火牆規則。
建立資源群組
使用下列命令來建立資源群組。 Azure 資源群組是在其中部署與管理 Azure 資源的邏輯容器。
az group create --name $RESOURCE_GROUP --location $LOCATION
建立適用於 PostgreSQL 的 Azure 資料庫彈性伺服器實例
使用下列命令來建立資料庫實例以供開發之用。 可高載層符合成本效益,適用於不需要持續高效的工作負載。
az postgres flexible-server create \
--resource-group $RESOURCE_GROUP \
--name $DB_SERVER_NAME \
--location $LOCATION \
--tier Burstable \
--sku-name standard_b1ms \
--active-directory-auth enabled \
--public-access $PUBLIC_IP \
--version 16
此命令需要幾分鐘的時間來完成。 完成之後,會顯示類似下列範例的輸出:
{
"connectionString": "postgresql://<admin-user>:<admin-password>@<name>.postgres.database.azure.com/None?sslmode=require",
"databaseName": null,
"firewallName": "FirewallIPAddress_<timestamp>",
"host": "<name>.postgres.database.azure.com",
"id": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.DBforPostgreSQL/flexibleServers/<name>",
"location": "<region>",
"password": "<admin-password>",
"resourceGroup": "<resource-group>",
"skuname": "<sku-name>",
"username": "<admin-user>",
"version": "<version>"
}
僅供測試之用,請使用下列命令來建立防火牆規則,以允許存取更廣泛的IP範圍:
az postgres flexible-server firewall-rule create \
--resource-group $RESOURCE_GROUP \
--name $DB_SERVER_NAME \
--rule-name allowiprange \
--start-ip-address 0.0.0.0 \
--end-ip-address 255.255.255.255
授與系統管理員對 Entra 標識碼的存取權
使用下列指令來取得你的 Entra 身分識別碼 object id
。
export USER_OBJECT_ID=$(az ad signed-in-user show \
--query id \
--output tsv \
| tr -d '\r')
使用下列命令,授與系統管理員對 Entra 識別碼的存取權:
az postgres flexible-server ad-admin create \
--resource-group $RESOURCE_GROUP \
--server-name $DB_SERVER_NAME \
--object-id $USER_OBJECT_ID \
--display-name azureuser
允許 pgvector 所需的延伸模組
您必須先使用下列命令,才能啟用 所需的 pgvector
擴充功能:
az postgres flexible-server parameter set \
--resource-group $RESOURCE_GROUP \
--server-name $DB_SERVER_NAME \
--name azure.extensions \
--value vector,hstore,uuid-ossp
驗證資料庫的連線能力
使用下列命令取得資料庫伺服器的完整主機名稱:
export PGHOST=$(az postgres flexible-server show \
--resource-group $RESOURCE_GROUP \
--name $DB_SERVER_NAME \
--query fullyQualifiedDomainName \
--output tsv \
| tr -d '\r')
使用下列命令,為您的使用者識別碼取得存取權杖:
export PGPASSWORD="$(az account get-access-token \
--resource https://ossrdbms-aad.database.windows.net \
--query accessToken \
--output tsv)"
使用下列命令,以連線到資料庫:
psql "host=$PGHOST dbname=postgres user=azureuser sslmode=require"
下列輸出是典型的:
psql (14.13, server 16.4)
WARNING: psql major version 14, server major version 16.
Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
postgres=>
建立此規則之後,您可以使用 az postgres flexible-server firewall-rule update
來更新它。
單元摘要
您現在已備妥已啟用向量功能的PostgreSQL資料庫,以提供向量相似性搜尋功能。