Como instalar o pgvector no PostgreSQL
O pgvector é uma extensão open source que possibilita ao PostgreSQL atuar como uma Vector Store. Através dessa extensão temos acesso a tipos de dados específicos para armazenamento de vetores, como o tipo vector e halfvec, imeplementação de índices vetoriais IVFFlat e HNSW e operações de Similarity Search através de operadores de distância vetorial.
Neste post vou demontrar como instalar o pgvector no PostgreSQL na versão 15 no Ubuntu 22.04.4 LTS (Jammy Jellyfish).
Instalação do PostgreSQL via APT
Inicialmente vamos instalar alguns pacotes necessários para a instalação do Postgres:
sudo apt install dirmngr ca-certificates software-properties-common apt-transport-https lsb-release curl -y
Em seguida importamos a chave GPG do Postgres para verificar a autenticidade do pacote:
curl -fSsL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql.gpg > /dev/null
Na sequência adicionamos o repositório do Postgres ao APT repo:
echo deb [arch=amd64,arm64,ppc64el signed-by=/usr/share/keyrings/postgresql.gpg] http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main | sudo tee /etc/apt/sources.list.d/postgresql.list
Para refletir as alterações feitas no APT repo, rodamos um update:
sudo apt update
Por fim instalamos o PostgreSQL 15, usando os pacotes do server e client:
sudo apt install postgresql-15 postgresql-client-15 -y
Após a instalação podemos verificar que o PostgreSQL já está rodando:
$ systemctl status postgresql ● postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) Active: active (exited) since Thu 2025-05-01 14:33:00 UTC; 44s ago Main PID: 5588 (code=exited, status=0/SUCCESS) CPU: 1ms May 01 14:33:00 teste systemd[1]: Starting PostgreSQL RDBMS... May 01 14:33:00 teste systemd[1]: Finished PostgreSQL RDBMS.
Preparando o PostgreSQL para conexões
Com o banco instalado, precisamos realizar algumas configurações para que ele esteja apto a receber conexões. O primeiro passo é liberar a porta 5432, a porta default do Postgres, no firewall. No caso do ufw, podemos liberar o acesso usando:
# para liberar a porta para qualquer origem: sudo ufw allow 5423/tcp # ou liberar a porta para uma subnet específica: sudo ufw allow proto tcp from 192.168.1.0/24 to any port 5432
O próximo passo é ajustar o arquivo de configurações do Postgres. Uma forma fácil de encontrar o seu caminho é utilizando o comando ps:
ps aux | grep postgres postgres 6453 0.0 1.5 219304 30732 ? Ss 14:33 0:00 /usr/lib/postgresql/15/bin/postgres -D /var/lib/postgresql/15/main -c config_file=/etc/postgresql/15/main/postgresql.conf postgres 6454 0.0 0.3 219304 7140 ? Ss 14:33 0:00 postgres: 15/main: checkpointer postgres 6455 0.0 0.3 219448 7140 ? Ss 14:33 0:00 postgres: 15/main: background writer postgres 6457 0.0 0.5 219304 11964 ? Ss 14:33 0:00 postgres: 15/main: walwriter postgres 6458 0.0 0.4 220892 9924 ? Ss 14:33 0:00 postgres: 15/main: autovacuum launcher postgres 6459 0.0 0.4 220872 9948 ? Ss 14:33 0:00 postgres: 15/main: logical replication launcher piontk 7724 0.0 0.1 6612 2232 pts/0 S+ 14:35 0:00 grep --color=auto postgres
No arquivo, vamos editar o parâmetro listen_address
, adicionando o IP do host que está rodando o PostgreSQL. No mesmo arquivo temos o parâmetro hba_file
, que indica o caminho do arquivo pg_hba.conf, que iremos editar posteriormente:
$ sudo vi /etc/postgresql/15/main/postgresql.conf ... hba_file = '/etc/postgresql/15/main/pg_hba.conf' ... listen_addresses = '192.168.1.197,localhost' ...
No arquivo pg_hba.conf, vamos adicionar a regra permitindo conexões locais e conexões a partir da subnet 192.168.1.0/24 utilizando o método SCRAM-SHA-256:
$ sudo vi /etc/postgresql/15/main/pg_hba.conf ... # "local" is for Unix domain socket connections only local all all scram-sha-256 # IPv4 local connections: host all all 192.168.1.0/24 scram-sha-256 ...
Após as alterações reiniciamos o Postgres para que reflita as alterações feitas no arquivo de parâmetros:
sudo systemctl restart postgresql
Instalação do pgvector
Para que possamos utilizar o pgvector, precisamos realizar a instalação do seu pacote no Linux:
sudo apt install postgresql-15-pgvector -y
Dentro do banco de dados, irei criar um database chamado vectors, e dentro dele, um schema também chamado vectors, onde ficará a extensão do pgvector. A extensão é adicionada ao schema através do comando CREATE EXTENSION:
postgres=# create database vectors; CREATE DATABASE postgres-# \c vectors You are now connected to database "vectors" as user "postgres". vectors=# create schema vectors; CREATE SCHEMA vectors=# create extension vector schema vectors; CREATE EXTENSION
Nesse ponto a extensão já está adicionada ao banco, o que podemos verificar com o metacomando \dx
:
vectors=> \dx List of installed extensions Name | Version | Schema | Description ---------+---------+------------+------------------------------------------------------ plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language vector | 0.8.0 | vectors | vector data type and ivfflat and hnsw access methods (2 rows)
O próximo passo é fornecer o acesso a ela para o nosso usuário de aplicação. Para meus futuros testes, vou criar um usuário chamado vectors (quanta criatividade) e adicionar o schema onde a estensão foi instalada ao seu search path:
vectors=# create user vectors with login encrypted password 'vectors' connection limit 20; CREATE ROLE vectors=# grant connect on database vectors to vectors; GRANT vectors=# alter user vectors set search_path to vectors, public; ALTER ROLE vectors=# alter schema vectors owner to vectors; ALTER SCHEMA
Agora podemos validar a conexão do usuário com o database, e criar uma tabela que utilize uma coluna do tipo vector para verificar que o usuário possui o acesso ao pgvector:
vectors=# \c vectors vectors Password for user vectors: You are now connected to database "vectors" as user "vectors". vectors=> CREATE TABLE teste ( id SERIAL PRIMARY KEY, embedding vector(1536) ); CREATE TABLE
Conclusão
Neste post demonstrei como instalar o pgvector em um banco PostgreSQL 15. Posteriormente estarei utilizando esse mesmo ambiente para testes envolvendo Vector Search e a indexação vetorial usando índices IVFFlat e HNSW.
Caso tenha interesse em saber mais sobre o pgvector, abaixo está a página da extensão, que contém diversas informações sobre as suas capacidades:
Até a próxima!
Publicar comentário