pgvector
Extension Postgres qui ajoute le type `vector` et les opérateurs de distance (`<->` pour L2, `<=>` pour cosinus, `<#>` pour le produit scalaire négatif, `<+>` pour L1). Permet de faire du RAG sans déployer une DB dédiée, la même Postgres qui sert ton app sert aussi tes embeddings. Disponible sur Supabase, à activer une fois (tableau de bord ou `create extension vector with schema extensions;`). Seuil de décision : reste sur Postgres + pgvector tant que tu as quelques millions de vecteurs. Le vecteur vit dans la même table que la ligne, donc quand un prix change ou qu'un produit est supprimé, le vecteur suit dans la même transaction. Vers des dizaines de millions de vecteurs, l'index de voisins approchés (ANN) qui rend la recherche rapide avale la mémoire du serveur, et les requêtes transactionnelles, un paiement par exemple, ralentissent : l'IA affame ta base principale. Une base vectorielle dédiée (Pinecone, Weaviate, Qdrant) la protège, au prix de deux systèmes à garder synchronisés : suppression oubliée, délais, vecteurs fantômes.
Forces
- Une seule DB pour ton app et tes embeddings
- Joins SQL natifs entre tables app et table embeddings
- Disponible sur Supabase sans rien installer : une ligne `create extension` et c'est parti
Limites
- Performance index HNSW moins rapide qu'une vraie DB vectorielle dédiée au-delà de quelques millions de vecteurs
- Requiert un minimum de SQL pour requêter (vs ChromaDB qui est full-Python)
Pour qui
- Apps qui font déjà du Postgres ou Supabase
- RAG avec joins SQL (ex : filtrer par user_id puis recherche vectorielle)