pgvector é uma extensão de código aberto do PostgreSQL que adiciona a capacidade de armazenar, indexar e pesquisar embeddings de vetores (representações numéricas de dados). Ele traz dados vetoriais e busca por similaridade para o mesmo sistema que contém os dados da aplicação, possibilitando a busca semântica, recomendações e geração aumentada por recuperação (RAG) sem depender de um banco de dados vetorial externo. O pgvector estende o Postgres para suportar esses casos de uso orientados por IA.
Muitas aplicações modernas de IA dependem da recuperação de dados semanticamente similares, não apenas de correspondências exatas. O pgvector permite que as equipes realizem esse tipo de recuperação em tempo de execução dentro de sua pilha Postgres existente. Por exemplo, as aplicações frequentemente precisam recuperar conteúdo que seja contextualmente similar a uma consulta, mesmo que a redação seja diferente. Essa abordagem é frequentemente referida como similaridade de cosseno, busca pelo vizinho mais próximo ou busca baseada em embeddings.
Este artigo fornece uma visão geral educacional de alto nível do pgvector, em vez de orientações detalhadas de implementação.
O pgvector adiciona um novo tipo de dado ao Postgres chamado vector. Ele permite que embeddings, representações numéricas de texto, imagens ou outro conteúdo sejam armazenados ao lado de dados relacionais sem a necessidade de um sistema separado. Esses embeddings são tipicamente gerados por modelos de machine learning que convertem conteúdo como texto ou imagens em forma numérica.
Em um nível geral, o processo é simples. Os embeddings são armazenados no banco de dados. Quando uma consulta é recebida, um embedding de consulta é gerado a partir da entrada, e o pgvector retorna os registros cujos vetores são mais similares, ou mais próximos em significado, a essa consulta. Em vez de corresponder palavras-chave, os resultados são recuperados com base no significado.
O pgvector determina a similaridade usando métricas de distância:
O pgvector inclui vários recursos que tornam a busca vetorial prática dentro do Postgres.
halfvec, sparsevec e bit ajudam a reduzir o uso de memória ao trabalhar com grandes conjuntos de dados de embeddings.O pgvector é amplamente utilizado para potencializar recursos de aplicações orientadas por IA:
As aplicações podem recuperar documentos ou conteúdo com base no significado, em vez de palavras-chave. Este é um componente central da geração aumentada por recuperação (RAG), onde modelos de linguagem grandes usam o contexto recuperado para gerar respostas precisas e relevantes. Como o pgvector executa a busca por similaridade diretamente no Postgres, essa recuperação pode ocorrer em tempo real sem a necessidade de um sistema separado.
Itens podem ser associados a comportamentos ou preferências passadas para suportar recomendações. Esse padrão é comumente usado para recomendações de produtos, descoberta de conteúdo e personalização em aplicações. O pgvector torna eficiente a identificação de itens relacionados com base em padrões no comportamento do usuário ou no conteúdo.
Embeddings de imagens podem ser armazenados e comparados para encontrar rapidamente imagens visualmente similares. Isso é amplamente utilizado em plataformas de mídia, e-commerce e ferramentas criativas. Armazenar esses embeddings ao lado dos dados da aplicação facilita a execução de buscas por similaridade sem infraestrutura adicional.
Pontos de dados que estão distantes de padrões típicos no espaço vetorial podem ser usados para identificar outliers. Isso é útil para detecção de fraudes, monitoramento e controle de qualidade. O pgvector possibilita isso facilitando a comparação de vetores e a detecção de desvios.
Conteúdo duplicado ou quase duplicado pode ser identificado, mesmo quando expresso de maneiras diferentes ou formatado de formas distintas. Isso é importante para gerenciamento de conteúdo, qualidade de busca e higiene de dados. A comparação baseada em similaridade torna possível detectar duplicatas além de correspondências exatas.
À medida que a busca vetorial se torna parte de mais aplicações, as equipes frequentemente enfrentam uma decisão prática: a busca vetorial deve permanecer no Postgres, ou um banco de dados vetorial dedicado é necessário? A resposta depende da escala, dos requisitos de desempenho e da complexidade operacional.
As diferenças podem ser resumidas em dimensões chave:
| Ferramenta | Complexidade Operacional | Teto de Escalabilidade | Suporte a Consultas Híbridas | Custo | Maturidade do Ecossistema |
pgvector | Mais Baixa (DB Existente) | Alta (~100M+ vetores) | Melhor (Joins SQL Nativos) | Mais Baixo (Incluído) | Alta (Ecossistema Postgres) |
Pinecone | Baixa (Serverless/SaaS) | Mais Alta (Bilhões+) | Moderado (Apenas Metadados) | Alta (Baseado em Uso) | Alta (Específico para IA) |
Weaviate | Moderada (Multimodal) | Muito Alta | Alta (GraphQL/Vetor) | Moderado | Alta (Código Aberto) |
Qdrant | Moderada (Baseado em Rust) | Muito Alta | Alta (Foco em Filtragem) | Moderado | Crescendo Rapidamente |
O pgvector é o ponto de partida natural para equipes que já usam Postgres e operam abaixo do teto de escala. Ele funciona bem quando a busca vetorial faz parte de um fluxo de trabalho de aplicação existente e os volumes de dados ou as demandas de consulta permanecem gerenciáveis. Bancos de dados vetoriais dedicados se tornam mais relevantes quando o volume de consultas, os requisitos de recall ou as cargas de trabalho multi-inquilino ultrapassam o que o Postgres pode suportar eficientemente.
O pgvectorscale é projetado para equipes que desejam estender seus limites com o pgvector antes de adotar um banco de dados vetorial dedicado. Ele aborda os desafios de desempenho e escalabilidade que surgem à medida que os volumes de dados e as demandas de consulta aumentam, especialmente em relação à velocidade de indexação e latência de consulta. Ao melhorar o desempenho do pgvector em escalas maiores, ele permite que as equipes continuem usando o Postgres por mais tempo sem reestruturar seus sistemas. Isso o torna um passo intermediário prático para aplicações que se aproximam dos limites do que o pgvector pode lidar sozinho.
O pgvector é poderoso, mas vem com compromissos:
Compreender essas limitações ajuda a determinar quando o pgvector é suficiente e quando infraestrutura adicional pode ser necessária.
pgvector pode ser instalado em macOS e na maioria das distribuições Linux usando gerenciadores de pacotes padrão como Homebrew. Ele também está disponível em muitas plataformas Postgres gerenciadas, incluindo AWS RDS, Supabase, Azure Database for PostgreSQL, Google Cloud SQL e Neon.
Instruções de instalação e configuração estão disponíveis no repositório oficial do pgvector no GitHub, que inclui orientação passo a passo mantida pelos autores do projeto.
Clientes Databricks que usam Postgres também podem consultar a documentação de extensões OLTP da Databricks para obter orientação específica da plataforma.
pgvector opera na camada de serviço operacional de um sistema de IA, onde a recuperação de baixa latência é necessária em tempo de execução da aplicação. É comumente usado para dar suporte a pesquisa semântica, recomendações e geração aumentada por recuperação (RAG) dentro de aplicações.
Em contraste, Databricks Mosaic AI Vector Search é mais adequado para cargas de trabalho de IA em larga escala e processadas em lote, onde os pipelines de dados são gerenciados no lakehouse. Esses ambientes suportam processamento de dados centralizado, grandes conjuntos de dados e fluxos de trabalho complexos.
Essas abordagens são complementares, e as equipes frequentemente usam ambas em diferentes camadas da pilha. pgvector suporta consultas de aplicação em tempo real, enquanto plataformas como Databricks lidam com preparação de dados em larga escala, geração de embeddings e fluxos de trabalho orientados por modelo.
pgvector é um banco de dados vetorial completo?
pgvector permite que o Postgres armazene embeddings e realize busca de similaridade diretamente nesses dados. No entanto, não é um banco de dados vetorial construído especificamente para essa finalidade. Bancos de dados vetoriais dedicados oferecem escalabilidade e otimizações de desempenho adicionais para cargas de trabalho maiores.
Qual é a diferença entre HNSW e IVFFlat em pgvector?
HNSW é otimizado para desempenho rápido de consulta e usa uma estrutura de grafo em memória, que requer mais memória. IVFFlat tem uma pegada de memória menor e organiza vetores em clusters através de uma etapa de treinamento, mas o desempenho pode variar dependendo do conjunto de dados e da carga de trabalho. A escolha depende se a prioridade é velocidade ou eficiência de memória.
Quantos vetores o pgvector pode lidar?
pgvector pode lidar tipicamente com milhões a dezenas de milhões de vetores, dependendo do hardware, estratégia de indexação e padrões de consulta. À medida que os conjuntos de dados crescem, o desempenho pode diminuir sem ajuste cuidadoso ou ferramentas adicionais. Fatores como memória disponível, tipo de índice e frequência de consulta influenciam a escalabilidade.
pgvector suporta similaridade de cosseno?
Sim, pgvector suporta similaridade de cosseno como uma de suas principais métricas de distância. Ela mede o quão próximos dois vetores apontam na mesma direção, o que frequentemente reflete a similaridade semântica em aplicações baseadas em embeddings. Isso o torna bem adequado para pesquisa semântica, sistemas de recomendação e processamento de linguagem natural.
pgvector é gratuito e de código aberto?
Sim, pgvector é um projeto de código aberto lançado sob uma licença permissiva. Ele pode ser usado com instalações Postgres padrão, bem como com muitos serviços Postgres gerenciados. Isso o torna um ponto de partida acessível para adicionar recursos de busca vetorial.
pgvector pode fazer busca híbrida?
Sim, pgvector pode ser combinado com a busca de texto completo do Postgres para suportar busca híbrida. Isso permite que os resultados equilibrem a relevância semântica com a correspondência de palavras-chave, melhorando tanto a precisão quanto a usabilidade. A busca híbrida é especialmente útil em cenários como busca de produtos e busca de documentação, onde tanto o significado quanto os termos exatos são importantes.
pgvector é um ponto de partida prático para qualquer equipe que queira adicionar busca vetorial a uma aplicação Postgres existente. Ao armazenar embeddings ao lado de dados relacionais e suportar busca de similaridade nativamente dentro do banco de dados, ele remove a sobrecarga operacional de gerenciar um armazenamento vetorial separado. Para muitas cargas de trabalho — pesquisa semântica, pipelines RAG, recomendações e detecção de anomalias — ele entrega o que as equipes precisam sem exigir um novo sistema.
À medida que os volumes de dados crescem ou as demandas de consulta aumentam, o escalonamento do pgvector pode estender o limite antes que um banco de dados vetorial dedicado se torne necessário. Para organizações que gerenciam cargas de trabalho de IA em larga escala em uma plataforma de dados unificada, o Databricks Mosaic AI Vector Search oferece uma abordagem complementar projetada para a camada do lakehouse. Juntas, essas ferramentas dão às equipes a flexibilidade de adequar sua infraestrutura de busca vetorial aos seus requisitos reais de carga de trabalho — em qualquer escala.
(Esta publicação no blog foi traduzida utilizando ferramentas baseadas em inteligência artificial) Publicação original
