練習 - 在 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資料庫,以提供向量相似性搜尋功能。