Ejercicio: configuración de la extensión pgvector en Azure PostgreSQL para su uso con Spring AI
En este ejercicio, creará una instancia de servidor flexible de Azure Database para PostgreSQL, habilitará la extensión pgvector, y creará la estructura de base de datos necesaria para su uso con la abstracción Spring AI VectorStore.
Inicio de sesión en Azure a través de la CLI de Azure
Use el comando siguiente para iniciar sesión en Azure:
az login
Establecer valores de parámetros
Use los siguientes comandos para establecer algunas variables de entorno. Estos valores se pasan a comandos posteriores para crear la base de datos y los recursos necesarios. Asegúrese de reemplazar los marcadores de posición <...> por sus propios valores. El <server-name> valor debe ser único globalmente en todas las instancias de Azure. Una manera sencilla de garantizar la unicidad consiste en usar una combinación de las iniciales, la fecha actual y algún identificador, por ejemplo, abc-031325-spring-ai-postgresql-server.
export RESOURCE_GROUP=<resource-group>
export LOCATION=<location>
export DB_SERVER_NAME=<server-name>
A continuación, use el siguiente comando para almacenar la dirección IP pública en una variable de entorno y mostrarla en la consola. Este valor se usa más adelante en esta unidad para limitar el acceso a la dirección IP externa del servidor PostgreSQL. Usando la dirección IP pública del equipo que está utilizando, solo su dirección IP puede acceder al servidor.
export PUBLIC_IP=$(curl -s ipinfo.io/ip)
echo "Start IP: $PUBLIC_IP"
Este comando debe funcionar en la mayoría de las distribuciones de Linux y en Git Bash. Si no funciona, también puede obtener la dirección IP pública mediante https://whatismyipaddress.com/
Nota:
La dirección IP puede cambiar. Si cambia, debe actualizar la regla de firewall correspondiente en consecuencia.
Creación de un grupo de recursos
Cree un grupo de recursos mediante el comando siguiente. Un grupo de recursos de Azure es un contenedor lógico en el que se implementan y se administran los recursos de Azure.
az group create --name $RESOURCE_GROUP --location $LOCATION
Creación de instancias de servidor flexible de Azure Database for PostgreSQL
Use el comando siguiente para crear una instancia de base de datos con fines de desarrollo. El nivel ampliable es un nivel rentable para cargas de trabajo que no requieren un rendimiento coherente.
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
Este comando tarda unos minutos en completarse. Una vez completado, muestra una salida similar a la del ejemplo siguiente:
{
"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>"
}
Solo con fines de prueba, use el comando siguiente para crear una regla de firewall para permitir el acceso a un intervalo IP más amplio:
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
Conceder acceso de administrador a su ID de Entra
Use el siguiente comando para obtener object id para su Entra ID:
export USER_OBJECT_ID=$(az ad signed-in-user show \
--query id \
--output tsv \
| tr -d '\r')
Use el siguiente comando para conceder acceso de administrador a su id. de 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
Permitir las extensiones necesarias para pgvector
Para poder habilitar las extensiones requeridas por pgvector, debe permitirlas mediante el siguiente comando:
az postgres flexible-server parameter set \
--resource-group $RESOURCE_GROUP \
--server-name $DB_SERVER_NAME \
--name azure.extensions \
--value vector,hstore,uuid-ossp
Validación de la conectividad con la base de datos
Use el siguiente comando para obtener el nombre de host completo del servidor de bases de datos:
export PGHOST=$(az postgres flexible-server show \
--resource-group $RESOURCE_GROUP \
--name $DB_SERVER_NAME \
--query fullyQualifiedDomainName \
--output tsv \
| tr -d '\r')
Use el siguiente comando para obtener un token de acceso para el identificador de usuario:
export PGPASSWORD="$(az account get-access-token \
--resource https://ossrdbms-aad.database.windows.net \
--query accessToken \
--output tsv)"
Use el siguiente comando para conectarse a la base de datos:
psql "host=$PGHOST dbname=postgres user=azureuser sslmode=require"
La salida siguiente es típica:
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=>
Una vez creada esta regla, puede actualizarla mediante az postgres flexible-server firewall-rule update.
Resumen de la unidad
Ahora tiene una base de datos PostgreSQL habilitada para vectores que proporciona funcionalidades de búsqueda de similitud de vectores.