Aller au contenu
Cercle IA Tech · Embeddings Un site du réseau Cercle IA Tech

Guide

Installer pgvector : Docker, apt, Homebrew, première requête

Installer l'extension pgvector sur PostgreSQL, créer une table de vecteurs, charger des embeddings et lancer une première recherche par similarité.

Mis à jour le

pgvector s'installe en trois temps : ajouter l'extension au serveur PostgreSQL (image Docker, paquet apt, Homebrew ou compilation), l'activer dans la base avec CREATE EXTENSION vector;, puis créer une colonne vector(n) de la dimension de votre modèle. Les commandes ci-dessous viennent du dépôt officiel, lu le 15/11/2026, dont les instructions portent sur la version 0.8.7 et sur PostgreSQL 13 et suivants.

1. Ajouter l'extension au serveur

Choisissez la voie qui correspond à votre installation.

Avec Docker. Une image prête, construite sur l'image officielle de PostgreSQL :

docker pull pgvector/pgvector:pg18-trixie

Des étiquettes existent de pg13 à pg18 : remplacez 18 par votre version de PostgreSQL.

Sur Debian ou Ubuntu (paquets APT). Le paquet porte le numéro de version de PostgreSQL :

sudo apt install postgresql-18-pgvector

(postgresql-17-pgvector pour PostgreSQL 17, et ainsi de suite.)

Sur Mac avec Homebrew. brew install pgvector. Le dépôt précise que cette formule ne s'ajoute qu'aux formules postgresql@18 et postgresql@17.

Par compilation (Linux, Mac).

cd /tmp
git clone --branch v0.8.7 https://github.com/pgvector/pgvector.git
cd pgvector
make
make install # peut demander sudo

Sous Windows, le dépôt demande d'installer la prise en charge du C++ dans Visual Studio et de lancer l'invite « x64 Native Tools Command Prompt » en administrateur.

Chez un hébergeur. pgvector est disponible chez de nombreux fournisseurs de PostgreSQL hébergé ; le dépôt renvoie à une liste tenue dans ses tickets. Il suffit alors de l'activer.

2. Activer l'extension dans la base

CREATE EXTENSION vector;

Lancez-la dans la base où vivront vos vecteurs, avec un rôle qui a le droit de créer des extensions.

3. Créer la table

La colonne prend la dimension exacte de votre modèle. Pour mistral-embed, qui produit des vecteurs de 1 024 dimensions d'après sa documentation :

CREATE TABLE passages (
  id bigserial PRIMARY KEY,
  document text,
  contenu text,
  embedding vector(1024)
);

Pour une table existante : ALTER TABLE passages ADD COLUMN embedding vector(1024);

Gardez le texte d'origine et ses métadonnées (document, page, groupes autorisés) à côté du vecteur : ils servent à citer la source et à filtrer.

4. Charger les vecteurs

Pour quelques lignes, un INSERT suffit ; le vecteur s'écrit comme une liste entre crochets, par exemple '[0.12,-0.03,…]'. Pour un chargement en masse, la documentation conseille COPY, puis la création des index après le chargement initial, pour de meilleures performances.

5. Première recherche

Les cinq passages les plus proches d'un vecteur de question, par distance cosinus (<=>) :

SELECT id, contenu, 1 - (embedding <=> $1) AS similarite
FROM passages
ORDER BY embedding <=> $1
LIMIT 5;

$1 est le vecteur de la question, calculé avec le même modèle que les passages. La documentation donne la formule 1 - (embedding <=> …) pour obtenir la similarité cosinus. Les autres opérateurs sont <-> (distance euclidienne) et <#> (produit scalaire négatif) : voir Similarité cosinus.

6. Ce qui se passe sans index

Par défaut, pgvector fait une recherche exacte : il compare la question à toutes les lignes. Le rappel est parfait, mais le temps croît avec le volume. La documentation indique qu'on peut accélérer ces requêtes en augmentant max_parallel_workers_per_gather. Quand la table grossit, ajoutez un index approximatif : voir pgvector : HNSW ou IVFFlat.

Taille à prévoir

Chaque vector occupe 4 × dimensions + 8 octets : 4 104 octets pour 1 024 dimensions. Le type halfvec (demi-précision) divise presque cette taille par deux, avec 2 × dimensions + 8 octets. Le maximum est de 16 000 dimensions par vecteur, mais seulement 2 000 pour qu'un vector soit indexable. Le calcul complet est détaillé dans Coût des embeddings.

Avant la mise en production

  • Activez l'extension dans chaque environnement (développement, test, production) et notez sa version.
  • Testez la restauration d'une sauvegarde : les vecteurs se sauvegardent comme le reste de la base.
  • Prévoyez le filtre par droits dès la conception de la table, comme expliqué dans RAG et droits d'accès.

Questions fréquentes

Quelles versions de PostgreSQL pgvector accepte-t-il ?

PostgreSQL 13 et versions suivantes, d'après le dépôt du projet.

Faut-il créer l'index tout de suite ?

Non. La documentation conseille de charger d'abord les données initiales, de préférence avec COPY, puis d'ajouter les index. Sans index, pgvector fait une recherche exacte.

Sources

Pages consultées pour écrire cet article :

  1. https://github.com/pgvector/pgvector
  2. https://docs.mistral.ai/inference/embeddings/text_embeddings

À lire aussi