PostgreSQL et pgvector : quand une application d’IA doit-elle utiliser une base de données vectorielle distincte ?

PostgreSQL et pgvector peuvent alimenter la récupération pour l’IA sans autre base de données, mais les permissions, le rappel, la montée en charge et la synchronisation déterminent la bonne architecture.

Lire en : English · తెలుగు · हिन्दी · Français · Español

Se connecter pour enregistrer

Illustration comparant PostgreSQL avec pgvector à une base de données vectorielle distincte pour la recherche en IA, y compris l’autorisation et la récupération hybride.

Une application d’IA peut conserver ses enregistrements métier, ses embeddings et ses documents consultables dans PostgreSQL, ou adopter un système vectoriel dédié. Le bon choix dépend de la qualité de la récupération, des contrôles d’accès, des besoins de montée en charge et du coût de la synchronisation de plusieurs systèmes de stockage de données.

Une organisation qui construit un assistant de connaissances fondé sur l’IA stocke peut-être déjà ses documents, ses utilisateurs et ses permissions dans PostgreSQL. Pour rendre ces documents consultables par leur sens, l’application a besoin de représentations vectorielles (embeddings). Il s’agit de représentations numériques du contenu qui permettent à un logiciel de trouver des passages sémantiquement proches.

Une première option consiste à stocker les embeddings avec les données de l’application grâce à l’extension pgvector. Une autre consiste à maintenir un système de recherche vectorielle distinct. Les deux architectures peuvent prendre en charge la génération augmentée par récupération (retrieval-augmented generation, RAG).

La question est de savoir si une base de données distincte résout un problème mesurable ou si elle introduit une complexité dont l’application n’a pas encore besoin.

Ce que pgvector apporte à PostgreSQL

PostgreSQL fournit déjà le stockage relationnel, les transactions, les jointures, l’indexation et la recherche plein texte (full-text search). pgvector ajoute des types de données vectoriels, des opérateurs de similarité et des index de recherche approximative des plus proches voisins, qui trouvent rapidement des correspondances proches sans examiner chaque vecteur.

Une application peut stocker dans PostgreSQL des fragments de documents, leurs embeddings et les métadonnées associées. Lorsqu’un utilisateur pose une question, l’application crée un embedding de cette question et recherche des embeddings de documents similaires. Les passages récupérés peuvent ensuite fournir du contexte à un modèle de langage qui génère une réponse.

pgvector ne génère pas d’embeddings, ne garantit pas l’exactitude des réponses produites par un modèle et ne détermine pas automatiquement si un document peut être lu sans risque par un utilisateur donné. Ces tâches restent de la responsabilité de l’application et de son architecture de sécurité.

Point important, pgvector est une extension, et non une fonctionnalité de PostgreSQL 19. Ses capacités existantes fonctionnent avec les versions de PostgreSQL prises en charge, et le README de pgvector indique la prise en charge de PostgreSQL 13 et des versions ultérieures : vérifiez donc quelles versions votre version de pgvector prend en charge. Pour ce qui change dans PostgreSQL lui-même, consultez notre article sur PostgreSQL 19 et sa version candidate.

Source : pgvector official documentation.

Comment une application RAG d’entreprise récupère les documents

Prenons un assistant de connaissances interne fictif, utilisé par les employés des services Finance et Ressources humaines. L’organisation stocke les documents et les métadonnées d’accès dans PostgreSQL. Chaque document est découpé en passages consultables, chacun étant associé à un embedding.

Une opération de récupération typique comporte plusieurs étapes.

1. Authentifier l’utilisateur. L’application établit l’identité de l’utilisateur et son contexte organisationnel autorisé.

2. Déterminer le périmètre documentaire autorisé. Le serveur identifie les documents auxquels l’utilisateur a le droit d’accéder, à partir de données d’autorisation fiables plutôt que d’instructions fournies par l’utilisateur.

3. Générer l’embedding de la question. Un modèle d’embedding convertit la question de l’utilisateur dans la même représentation vectorielle compatible que celle utilisée pour les passages stockés.

4. Récupérer les passages correspondants. PostgreSQL recherche du contenu sémantiquement similaire tout en appliquant les conditions d’accès aux documents appropriées.

5. Faire respecter la frontière d’accès. L’application vérifie que seul du contenu autorisé peut être transmis au modèle. La sécurité au niveau des lignes (row-level security) côté base de données peut fournir une couche de contrôle supplémentaire lorsqu’elle est correctement configurée.

6. Générer la réponse. Le modèle de langage utilise les passages autorisés comme contexte d’appui. L’application peut conserver les références des sources à des fins de traçabilité.

Le parcours d’une question dans une application RAG d’entrepriseSix étapes. L’application authentifie l’utilisateur et détermine le périmètre documentaire autorisé à partir de données fiables, avant toute recherche. La question est convertie en embedding avec le même modèle que les passages stockés. PostgreSQL récupère des passages similaires tout en appliquant les conditions d’accès. L’application fait respecter la frontière d’accès afin que seul le contenu autorisé atteigne le modèle de langage, qui génère ensuite la réponse avec les références des sources.{« publisher »: « TechiesJournal », « author »: « Prasad Kukkala », « asset »: « postgresql-pgvector-ai-vector-database-architecture-figure-1 », « role »: « diagram », « title »: « The path of one question through an enterprise RAG application », « description »: « Six steps. The application authenticates the user and decides the permitted document scope from trusted data before any search. The question is embedded with the same model as the stored passages. PostgreSQL retrieves similar passages while applying access conditions. The application enforces the access boundary so only permitted content reaches the language model, which then generates the response with source references. », « caption »: « Figure 1. The retrieval path, step by step. Select a step to read it. », « creator »: « TechiesJournal, authored as programmatic SVG by Claude (AI agent), not a generative image model », « generation_method »: « programmatic SVG, tools/postgresql-pgvector-vector-database/figures.py », « source_slug »: « postgresql-pgvector-ai-vector-database-architecture », « source_revision »: « V1.3 », « created »: « 2026-11-06 », « rights »: « Copyright 2026 TechiesJournal. All rights reserved. », « external_licence »: « none, no third-party material, no vendor logo, no PostgreSQL or pgvector mark », « watermark »: « visible TechiesJournal wordmark, lower right, part of the SVG », « language »: « fr (labels translated from the English figure) », « viewBox »: « 0 0 420 494 », « format »: « inline SVG, part of the post content (no separate file) », « file_size_bytes »: « not applicable, inline in the post », « evidence_note »: « Restates sentences of the approved manuscript only. No new claim, number or source. Not a measurement. », « light_dark_theme_verified »: « verified light and dark 2026-11-06: text and graphic contrast measured against WCAG AA, see the SOP audit record »}1Authentifieridentité et contexte d’organisation2Accès autorisédéfini d’abord, données fiables3Encoder la requêtemême modèle que les passages4Extrairepassages similaires, filtres d’accès5Imposer la frontièreseul le contenu permis atteint le modèle6Générerpassages autorisés, avec sourcesTechiesJournal
Figure 1. Le chemin de récupération, étape par étape. Sélectionnez une étape pour la lire.

Authentifier

L’application établit l’identité de l’utilisateur et son contexte organisationnel autorisé.

Accès autorisé

Le serveur identifie les documents auxquels l’utilisateur a le droit d’accéder, à partir de données d’autorisation fiables plutôt que d’instructions fournies par l’utilisateur.

Encoder la requête

Un modèle d’embedding convertit la question de l’utilisateur dans la même représentation vectorielle compatible que celle utilisée pour les passages stockés.

Extraire

PostgreSQL recherche du contenu sémantiquement similaire tout en appliquant les conditions d’accès aux documents appropriées.

Un document des Ressources humaines peut être sémantiquement similaire, mais la similarité ne rend pas ce document autorisé.

Imposer la frontière

L’application vérifie que seul du contenu autorisé peut être transmis au modèle.

La sécurité au niveau des lignes (row-level security) côté base de données peut fournir une couche de contrôle supplémentaire lorsqu’elle est correctement configurée.

Générer

Le modèle de langage utilise les passages autorisés comme contexte d’appui.

L’application peut conserver les références des sources à des fins de traçabilité.

Supposons qu’un employé du service Finance pose une question sur une politique d’approbation des dépenses. Un document des Ressources humaines peut être sémantiquement similaire, mais la similarité ne rend pas ce document autorisé. La requête en base de données et les contrôles applicatifs qui l’entourent doivent empêcher les contenus restreints d’entrer dans le contexte du modèle.

Sécurité au niveau des lignes dans PostgreSQL

La sécurité au niveau des lignes (row-level security, RLS) de PostgreSQL peut restreindre les enregistrements qu’un rôle de base de données a le droit de lire ou de modifier. Elle peut aider à faire respecter les frontières entre locataires (tenants) ou entre documents, indépendamment du filtrage ordinaire effectué par l’application.

Cependant, activer la RLS ne rend pas automatiquement chaque connexion sûre. Les superutilisateurs et les rôles dotés de BYPASSRLS contournent les politiques. Les propriétaires de table contournent normalement la RLS, sauf si FORCE ROW LEVEL SECURITY est configuré. Les applications doivent aussi établir le contexte d’autorisation de manière sûre, en particulier lorsque les connexions sont mutualisées (pooling) ou réutilisées.

La RLS doit être testée avec des rôles d’utilisateur réalistes, y compris par des tests négatifs prouvant que les documents non autorisés ne peuvent pas être récupérés. Une clause ordinaire WHERE tenant_id = ... est utile pour filtrer les requêtes, mais ne doit pas être considérée comme une frontière de sécurité complète lorsque l’application appelante peut la modifier ou l’omettre.

Source : PostgreSQL, Row Security Policies.

La recherche exacte et les index approximatifs résolvent des problèmes différents

Par défaut, pgvector effectue une recherche exacte des plus proches voisins. Celle-ci trouve les vecteurs les plus proches selon la mesure de distance choisie, ce qui fournit une référence utile pour évaluer les résultats approximatifs. À mesure que les collections de vecteurs et les volumes de requêtes augmentent, la recherche exacte peut devenir plus coûteuse.

pgvector prend en charge deux principales méthodes d’indexation approximative.

IndexFonctionnementCompromis important
HNSWOrganise les vecteurs en un graphe navigableBonnes caractéristiques de vitesse et de rappel pour de nombreuses charges de travail, avec un temps de construction et des besoins en mémoire supplémentaires
IVFFlatRegroupe les vecteurs en listes et explore les listes sélectionnéesNécessite des données d’entraînement adaptées et un réglage de l’étendue de la recherche

Les index approximatifs peuvent renvoyer des résultats différents de ceux de la recherche exacte. C’est pourquoi la latence seule est une mesure de performance insuffisante. Les équipes doivent aussi mesurer le rappel (recall), qui indique combien des plus proches voisins attendus ont été récupérés par rapport à une référence de recherche exacte.

Pour un assistant d’IA, un résultat plus rapide peut être moins utile si un document important est systématiquement omis.

Source : pgvector, Indexing.

Le filtrage peut affecter la qualité de la récupération

Les recherches en entreprise dépendent rarement de la seule similarité vectorielle. Les résultats peuvent aussi être filtrés par organisation, type de document, projet ou périmètre d’accès. Avec les index approximatifs, PostgreSQL peut appliquer le filtrage après que le parcours d’index a sélectionné des candidats, ce qui peut renvoyer moins de résultats que demandé.

Par exemple, si une recherche examine 40 candidats et que seuls 10 % d’entre eux satisfont un filtre de catégorie, environ quatre peuvent rester en moyenne. Il s’agit d’une illustration de la sélectivité, et non d’un résultat garanti pour chaque recherche.

pgvector a introduit les parcours d’index itératifs (iterative index scans) dans la version 0.8.0, le 30 octobre 2024. Les parcours itératifs peuvent continuer à examiner davantage de candidats de l’index lorsque le filtrage élimine trop de résultats, dans la limite des ressources et des seuils de parcours configurés. D’autres approches incluent les index PostgreSQL ordinaires, les index vectoriels partiels et le partitionnement des tables, selon les schémas de requêtes. Ces mécanismes doivent être choisis à partir de mesures.

Les locataires qui partagent un même index approximatif peuvent aussi s’influencer mutuellement. La documentation de pgvector indique que les vecteurs d’un locataire peuvent modifier le rappel et la vitesse pour les autres locataires, et recommande le partitionnement par liste ou des tables distinctes pour isoler les locataires.

Un filtre d’autorisation correctement appliqué ne doit jamais être affaibli dans le seul but d’augmenter le nombre de résultats de recherche. Un système de récupération qui renvoie moins de passages autorisés peut produire une réponse moins complète. Renvoyer des passages non autorisés est une défaillance différente et plus grave.

Sources : pgvector changelog, pgvector filtering guidance et pgvector multitenancy.

La recherche hybride combine différentes formes de pertinence

La similarité sémantique est utile lorsque les utilisateurs décrivent un concept sans employer les termes exacts d’un document. La recherche par mots-clés reste importante pour les identifiants, les noms de produits, les numéros de politiques internes et les termes techniques.

PostgreSQL prend en charge la recherche plein texte au moyen de fonctionnalités telles que tsvector et tsquery. Les applications peuvent combiner ces résultats avec la recherche par similarité de pgvector. Par exemple, un assistant de connaissances qui recherche un numéro d’incident précis peut tirer parti d’une correspondance textuelle exacte, tandis qu’une question de dépannage plus large peut tirer parti d’une récupération sémantique.

Les résultats classés peuvent être combinés à l’aide de techniques telles que la fusion par rang réciproque (reciprocal rank fusion), qui fusionne deux listes classées selon la position, puis éventuellement reclassés à l’aide d’un autre modèle de pertinence. Cependant, la recherche hybride ne garantit pas une meilleure récupération dans chaque application. Les équipes doivent évaluer des questions représentatives, les documents attendus et la qualité du classement final.

Sources : PostgreSQL full-text search et pgvector hybrid search.

Quand une base de données vectorielle distincte devient-elle utile ?

Un système vectoriel dédié peut devenir pertinent lorsque les besoins de récupération d’une application dépassent ce que son environnement PostgreSQL existant peut prendre en charge efficacement. Il peut s’agir d’un trafic de recherche vectorielle à faire monter en charge indépendamment, d’une indexation distribuée spécialisée, de très grandes collections de recherche ou de fonctionnalités de récupération indisponibles dans le déploiement PostgreSQL choisi.

Mais déplacer les embeddings vers un autre système crée des responsabilités supplémentaires.

Prenons la mise à jour d’un document. L’application modifie le document source dans PostgreSQL. Elle doit aussi régénérer les embeddings concernés et mettre à jour l’index vectoriel. Tant que la synchronisation n’est pas terminée, les recherches peuvent récupérer du contenu obsolète.

La suppression pose un problème voisin. Supprimer un document de la base de données transactionnelle doit aussi supprimer ou invalider ses représentations vectorielles.

Les changements de permissions sont particulièrement importants. Si l’accès d’un utilisateur est révoqué, des métadonnées d’accès obsolètes dans un autre système de recherche ne doivent pas permettre à du contenu restreint d’atteindre le modèle.

Une architecture à deux systèmes de stockage de données a donc besoin d’un moyen fiable de propager les modifications, de gérer les défaillances, de réessayer sans risque et de déterminer quand les données de recherche sont à jour. La capture des modifications de données (change-data capture), qui diffuse les modifications hors de la base de données, les modèles de boîte d’envoi transactionnelle (transactional outbox), qui enregistrent l’événement de modification dans la même transaction que les données, et le traitement d’événements peuvent aider, mais chacun exige une mise en œuvre et une responsabilité d’exploitation clairement attribuée. La vérification d’autorisation qui fait foi doit rester applicable même lorsque l’index de recherche est en retard.

Ce qu’un second système de stockage doit garder synchroniséQuatre situations. Lorsqu’un document change, ses embeddings et l’index vectoriel doivent suivre. Lorsqu’un document est supprimé, ses vecteurs doivent être supprimés ou invalidés. Lorsqu’une permission est révoquée, des métadonnées d’accès obsolètes ne doivent pas permettre à du contenu restreint d’atteindre le modèle. Lorsque l’index de recherche est en retard, la vérification d’autorisation qui fait foi doit rester applicable.{« publisher »: « TechiesJournal », « author »: « Prasad Kukkala », « asset »: « postgresql-pgvector-ai-vector-database-architecture-figure-2 », « role »: « diagram », « title »: « What a second data store has to keep in sync », « description »: « Four situations. When a document changes its embeddings and the vector index must follow. When a document is deleted its vectors must be removed or invalidated. When a permission is revoked stale access metadata must not let restricted content reach the model. When the search index lags the authoritative permission check must still be enforceable. », « caption »: « Figure 2. What a separate vector system has to keep in sync. Select a situation to read it. », « creator »: « TechiesJournal, authored as programmatic SVG by Claude (AI agent), not a generative image model », « generation_method »: « programmatic SVG, tools/postgresql-pgvector-vector-database/figures.py », « source_slug »: « postgresql-pgvector-ai-vector-database-architecture », « source_revision »: « V1.3 », « created »: « 2026-11-06 », « rights »: « Copyright 2026 TechiesJournal. All rights reserved. », « external_licence »: « none, no third-party material, no vendor logo, no PostgreSQL or pgvector mark », « watermark »: « visible TechiesJournal wordmark, lower right, part of the SVG », « language »: « fr (labels translated from the English figure) », « viewBox »: « 0 0 420 342 », « format »: « inline SVG, part of the post content (no separate file) », « file_size_bytes »: « not applicable, inline in the post », « evidence_note »: « Restates sentences of the approved manuscript only. No new claim, number or source. Not a measurement. », « light_dark_theme_verified »: « verified light and dark 2026-11-06: text and graphic contrast measured against WCAG AA, see the SOP audit record »}1Un document changeembeddings et index à actualiser2Document suppriméses vecteurs à retirer3Permission révoquéedonnées périmées sans fuite4Index en retardle contrôle d’accès tient bonTechiesJournal
Figure 2. Ce qu’un système vectoriel distinct doit garder synchronisé. Sélectionnez une situation pour la lire.

Un document change

L’application modifie le document source dans PostgreSQL.

Elle doit aussi régénérer les embeddings concernés et mettre à jour l’index vectoriel.

Tant que la synchronisation n’est pas terminée, les recherches peuvent récupérer du contenu obsolète.

Document supprimé

Supprimer un document de la base de données transactionnelle doit aussi supprimer ou invalider ses représentations vectorielles.

Permission révoquée

Si l’accès d’un utilisateur est révoqué, des métadonnées d’accès obsolètes dans un autre système de recherche ne doivent pas permettre à du contenu restreint d’atteindre le modèle.

Index en retard

Une architecture à deux systèmes de stockage de données a donc besoin d’un moyen fiable de propager les modifications, de gérer les défaillances, de réessayer sans risque et de déterminer quand les données de recherche sont à jour.

La vérification d’autorisation qui fait foi doit rester applicable même lorsque l’index de recherche est en retard.

Ces frontières de synchronisation font partie du coût de l’adoption d’un système vectoriel distinct.

Les modèles d’embedding introduisent une autre frontière de migration

Un embedding est généré à l’aide d’un modèle et d’une représentation donnés. Changer de modèle d’embedding peut modifier les dimensions des vecteurs, leurs distributions et le comportement de la similarité. Les embeddings produits par des modèles incompatibles ne doivent pas être combinés comme si leurs distances étaient directement comparables.

Les organisations doivent consigner les identifiants des modèles d’embedding, leurs versions et les paramètres de génération pertinents. Une migration de modèle peut exiger de générer de nouveaux embeddings, de reconstruire les index et d’évaluer la qualité de la récupération avant de basculer les requêtes de production. Pendant une transition, les anciennes et les nouvelles représentations peuvent devoir coexister.

pgvector présente aussi des limites d’indexation qui dépendent de la représentation. Sa prise en charge documentée de HNSW couvre les valeurs vector jusqu’à 2000 dimensions et les valeurs halfvec jusqu’à 4000 dimensions. Ces limites portent sur la représentation d’index en question, et non sur une restriction universelle applicable à toutes les stratégies de stockage ou de recherche possibles. Le choix du modèle d’embedding par l’application influe donc sur la conception des index.

Source : pgvector, Vector Types and Indexing Limits.

Comment une équipe doit-elle choisir ?

Une évaluation utile compare l’approche PostgreSQL existante à un système vectoriel distinct sur la même charge de travail représentative.

Domaine d’évaluationQuestion à se poser
Qualité de la récupérationLes passages pertinents attendus sont-ils trouvés de manière constante ?
AutorisationDes documents non autorisés peuvent-ils, à un moment quelconque, atteindre le contexte du modèle ?
PerformancesLa latence de recherche atteint-elle l’objectif avec une concurrence réaliste ?
FiltrageLes conditions sélectives sur les locataires et les métadonnées préservent-elles un rappel acceptable ?
Mises à jour et suppressionsÀ quelle vitesse l’index de recherche reflète-t-il les modifications des sources ?
ExploitationQuels sont les besoins en matière d’indexation, de sauvegarde, de supervision et de reprise ?
Montée en chargeLa demande de récupération peut-elle croître sans nuire aux charges de travail transactionnelles ?
CoûtQuelle est la dépense combinée d’infrastructure et de maintenance ?

La comparaison ne doit pas supposer que la technologie la plus spécialisée est automatiquement la plus adaptée. Une application petite ou de taille moyenne peut constater que PostgreSQL avec pgvector répond à ses besoins avec moins de systèmes à gérer. Une application plus grande peut justifier un niveau de recherche indépendant lorsque l’isolation des charges de travail, des fonctionnalités spécialisées ou une montée en charge indépendante apportent des bénéfices mesurables. Ces résultats dépendent de la charge de travail et doivent être établis par des tests, et non par des seuils génériques de taille de base de données.

L’exploitation comprend aussi l’application des correctifs à l’extension. Le changelog de pgvector consigne des corrections pour une possible corruption d’index pendant le vacuum HNSW dans la version 0.8.3 du 17 juin 2026, et pour des dépassements de tampon (buffer overflows) lors de la construction d’index IVFFlat dans les versions 0.8.6 du 29 juillet (sur les systèmes 32 bits) et 0.8.7 du 1er octobre 2026. Les équipes doivent utiliser une version corrective récente et tester la maintenance des index, comme le vacuum et les reconstructions, avant de s’appuyer sur un index en production.

Source : pgvector, Changelog.

Ce à quoi se résume la décision d’architecture

PostgreSQL et pgvector permettent de conserver les enregistrements de l’application, les embeddings, les métadonnées et la recherche textuelle dans un seul environnement de base de données. Cela peut simplifier les applications d’IA qui dépendent déjà fortement de données relationnelles. Un système vectoriel distinct peut offrir des capacités précieuses, mais exige une attention particulière à la synchronisation, aux suppressions, à l’autorisation et à la responsabilité d’exploitation.

Aucune des deux architectures ne garantit automatiquement la pertinence de la recherche ni la sécurité de la récupération.

Partez d’exigences vérifiées en matière de récupération et de contrôle d’accès. Utilisez PostgreSQL avec pgvector lorsqu’il y répond efficacement, et introduisez un système vectoriel distinct lorsque les mesures justifient la complexité supplémentaire.


Références et lectures complémentaires

  1. pgvector, Official Repository. Types vectoriels pris en charge, recherche par similarité, indexation, filtrage et multilocataire (multitenancy).
  2. pgvector, Changelog. Historique des versions, parcours d’index itératifs et versions correctives.
  3. PostgreSQL, Row Security Policies. Comportement des autorisations en base de données et conditions de contournement.
  4. PostgreSQL, Full Text Search. Recherche par mots-clés et classement.
  5. PostgreSQL, Full Text Search Introduction. Les types tsvector et tsquery.
  6. PostgreSQL, EXPLAIN. Inspection des plans d’exécution et évaluation des performances.
  7. pgvector, Release and Security History. Versions de l’extension et mises à jour de maintenance.

Sources vérifiées le 6 novembre 2026. pgvector publie souvent de nouvelles versions, et la version 0.8.7 du 1er octobre 2026 a corrigé un bogue de construction d’index IVFFlat et n’est pas présentée comme introduisant les capacités d’architecture abordées ici : vérifiez donc les sources ci-dessus avant d’agir. Les conseils de performance et d’architecture sont des recommandations analytiques, et non des résultats de benchmark indépendants réalisés par TechiesJournal.

Proposer une correction

Les corrections sont transmises à la rédaction et ne sont jamais publiées automatiquement. Aucun compte n'est nécessaire.