Skip to content

pgvector

Extension Postgres qui ajoute des colonnes vectorielles et des index HNSW ou IVFFlat, pour que les embeddings vivent à côté des lignes qu'ils décrivent.

Avis de Sheela · Mis à jour

Voir sur GitHub Open source

Notre note

4.6/5

Pour la plupart des équipes déjà sur Postgres, une base de données vectorielle dédiée est une infrastructure supplémentaire que pgvector rend inutile.

Qu’est-ce que pgvector ?

pgvector ajoute un type de données vectoriel et la recherche de similarité à PostgreSQL. Vous stockez les embeddings dans une colonne de table ordinaire et les interrogez avec SQL, en les joignant à vos autres données et en filtrant avec des clauses WHERE normales, à l'intérieur des mêmes transactions.

Sans index, il fait une recherche exacte. Pour la vitesse, il offre deux index approximatifs : HNSW (un graphe en couches, meilleur rappel, plus de mémoire) et IVFFlat (clusters, plus rapide à construire, rappel plus faible). Il prend en charge les vecteurs pleine précision, demi-précision, binaires et creux. Le type vector standard stocke jusqu'à 16 000 dimensions mais n'en indexe que 2 000 ; la demi-précision indexe jusqu'à 4 000 et le binaire jusqu'à 64 000. La version 0.8.0 a ajouté les scans d'index itératifs, qui continuent de chercher jusqu'à ce qu'assez de lignes passent votre filtre.

Il prend en charge Postgres 13 et ultérieur, même si la 0.9.0 non publiée abandonne 13 et 14, et il est disponible sur presque tous les services Postgres managés. La dernière version, 0.8.7 le 1er octobre 2026, corrige une faille de sécurité qui peut mener à l'exécution de code.

pgvector vaut-il le coup ?

pgvector supprime tout un service de votre pile. Les embeddings se trouvent dans la même base de données, les mêmes sauvegardes et les mêmes transactions que les documents qu'ils décrivent, si bien qu'il n'y a pas de second magasin à garder synchronisé et que les filtres sont du simple SQL. Il a environ 23 450 étoiles GitHub et seulement 17 issues ouvertes, et la 0.9.0 non publiée est déjà dans le changelog.

La plage confortable est plus étroite que le marketing ne le suggère. Encore, qui vend de l'hébergement Postgres, le place au niveau de Pinecone en dessous d'environ cinq millions de vecteurs à charge modérée (des centaines de requêtes par seconde), avec un réglage soigneux de shared_buffers, work_mem et des paramètres HNSW nécessaire de cinq à dix millions. Le stockage l'explique. Le README place chaque vecteur à 4 octets par dimension plus 8, si bien que dix millions d'embeddings de 1 536 dimensions prennent environ 61,5 Go avant tout index, et les builds HNSW ralentissent fortement une fois que le graphe dépasse maintenance_work_mem. La demi-précision divise cela par deux. Passé ce point, pgvectorscale ou VectorChord gardent les données dans Postgres un peu plus longtemps.

Le filtrage a besoin d'attention. Les index approximatifs filtrent après le scan, et le propre exemple du README est frappant : avec le hnsw.ef_search par défaut de 40 et un filtre correspondant à 10 % des lignes, une requête renvoie environ 4 résultats en moyenne. Les scans itératifs, les index partiels ou le partitionnement par tenant le corrigent, mais aucun n'est activé par défaut.

Les correctifs de sécurité sont arrivés en 2026 et valent la peine d'agir. CVE-2026-3172, un débordement de tampon dans les builds HNSW parallèles, laissait un utilisateur qui peut créer des index fuiter des données d'autres tables (0.6.0 à 0.8.1, corrigé en 0.8.2). CVE-2026-18022, un débordement de build IVFFlat sur les systèmes 32 bits uniquement, a été corrigé en 0.8.6, et CVE-2026-103484, aussi dans les builds IVFFlat, peut mener à l'exécution de code arbitraire dans chaque version jusqu'à 0.8.6 et est corrigé en 0.8.7. Sur un service managé, la version de l'extension suit le calendrier du fournisseur plutôt que le vôtre, ce qui est le vrai argument pour la vérifier avant de regarder les graphiques de benchmark.

Là où il fait la différence

  • Un ingénieur backend dans une entreprise SaaS sur Amazon RDS

    Ajouter une recherche sémantique sur deux millions de tickets de support

    Ajoutez une colonne halfvec, remplissez les embeddings, construisez un index HNSW et joignez les résultats à la table des tickets avec des clauses WHERE ordinaires. À 1 536 dimensions, cela fait environ 6 Go de données vectorielles, qu'une instance modestement plus grande gère sans nouveau service à faire tourner.

  • Un responsable d'ingénierie dans une start-up B2B avec 400 tenants clients

    Garder les documents de chaque client séparés dans la récupération RAG

    Partitionnez la table d'embeddings par tenant ou ajoutez des index partiels, et activez les scans itératifs pour que les requêtes filtrées renvoient des ensembles de résultats complets. La sécurité au niveau des lignes s'applique comme à n'importe quelle table, si bien que l'isolation utilise des contrôles que l'équipe audite déjà.

  • Un CTO qui pèse une facture de base de données vectorielle managée

    Décider si la recherche vectorielle a besoin de son propre fournisseur

    En dessous d'environ cinq millions de vecteurs à des centaines de requêtes par seconde, le conseil d'Encore favorise rester dans Postgres : une sauvegarde, un modèle d'accès, pas de travaux de synchronisation. Le compromis est le temps de réglage quand l'index dépasse la mémoire.

Avant de vous engager

Mise en route
Sur un Postgres managé, lancez CREATE EXTENSION vector ; en auto-hébergé, installez depuis les sources (make, make install) ou votre gestionnaire de paquets pour Postgres 13 et ultérieur. Mettez à niveau avec ALTER EXTENSION vector UPDATE dans chaque base de données.
Intégrations
N'importe quel client Postgres ou ORM ; des bibliothèques dans la plupart des langages enveloppent le type vector. Pris en charge sur les grands services managés listés dans l'issue des fournisseurs hébergés du projet, et utilisé comme backend par des outils RAG comme Open WebUI.
Données et confidentialité
Tout reste dans votre instance Postgres sous ses sauvegardes, rôles et sécurité au niveau des lignes existants ; l'extension n'envoie rien nulle part. La licence PostgreSQL ne met aucune limite sur l'usage commercial.
Coût à grande échelle
Pas de coût de licence ; vous payez pour une plus grande base de données. Chaque vecteur prend 4 octets par dimension plus 8, si bien que dix millions de vecteurs de 1 536 dimensions ont besoin d'environ 61,5 Go (la moitié en halfvec) plus l'index, et les builds veulent un maintenance_work_mem assez grand pour contenir le graphe.
Limites
Plafonds d'index de 2 000 dimensions (4 000 en demi-précision), filtrage après scan qui a besoin de scans itératifs, builds HNSW lents une fois la mémoire épuisée, pas de sharding horizontal, et la 0.9.0 abandonnera Postgres 13 et 14.

Les points forts

  • Pas de service supplémentaire : vecteurs, lignes et transactions en un seul endroit
  • Filtres et jointures en simple SQL
  • Disponible sur presque tous les Postgres managés
  • Licence PostgreSQL permissive

Les points faibles

  • Les requêtes filtrées par défaut peuvent renvoyer bien moins de lignes que demandé
  • N'indexe que 2 000 dimensions sur le type standard
  • Trois CVE de 2026, une permettant l'exécution de code avant 0.8.7
  • Pas conçu pour des milliards de vecteurs ou des débits de requêtes très élevés

Idéal pour

Les équipes déjà sur Postgres qui construisent du RAG ou de la recherche sémantique sur quelques millions de vecteurs.

Alternatives à pgvector

pgvector : questions fréquentes

pgvector vaut-il le coup ?
Pour la plupart des équipes déjà sur Postgres, une base de données vectorielle dédiée est une infrastructure supplémentaire que pgvector rend inutile. Nous lui donnons 4.6 sur 5.
Combien coûte pgvector ?
Gratuit et open source sous la licence PostgreSQL. Le seul coût est l'instance Postgres que vous faites déjà tourner, ou une plus grande.
Quels sont les inconvénients de pgvector ?
Les requêtes filtrées par défaut peuvent renvoyer bien moins de lignes que demandé; n'indexe que 2 000 dimensions sur le type standard; trois CVE de 2026, une permettant l'exécution de code avant 0.8.7; pas conçu pour des milliards de vecteurs ou des débits de requêtes très élevés.
À qui s’adresse pgvector ?
Les équipes déjà sur Postgres qui construisent du RAG ou de la recherche sémantique sur quelques millions de vecteurs.
Combien coûte pgvector pour une équipe ou en production ?
Pas de coût de licence ; vous payez pour une plus grande base de données. Chaque vecteur prend 4 octets par dimension plus 8, si bien que dix millions de vecteurs de 1 536 dimensions ont besoin d'environ 61,5 Go (la moitié en halfvec) plus l'index, et les builds veulent un maintenance_work_mem assez grand pour contenir le graphe.
pgvector est-il sûr pour les données de l’entreprise ?
Tout reste dans votre instance Postgres sous ses sauvegardes, rôles et sécurité au niveau des lignes existants ; l'extension n'envoie rien nulle part. La licence PostgreSQL ne met aucune limite sur l'usage commercial.
Quelles sont les meilleures alternatives à pgvector ?
Les alternatives les plus proches que nous avons testées sont Qdrant, Milvus, Weaviate, LanceDB et Chroma.

Réponses vérifiées le 23 oct. 2026.