¿Qué es pgvector?
pgvector añade a PostgreSQL un tipo de dato vectorial y búsqueda por similitud. Guardas los embeddings en una columna normal de una tabla y los consultas con SQL, cruzándolos con el resto de tus datos y filtrando con cláusulas WHERE normales, dentro de las mismas transacciones.
Sin índice hace búsqueda exacta. Para ganar velocidad ofrece dos índices aproximados: HNSW (un grafo por capas, mejor recall y más memoria) e IVFFlat (clústeres, más rápido de construir y con peor recall). Admite vectores de precisión completa, media precisión, binarios y dispersos. El tipo vector estándar guarda hasta 16.000 dimensiones pero solo indexa 2.000; la media precisión indexa hasta 4.000 y los binarios hasta 64.000. La versión 0.8.0 añadió los escaneos iterativos de índice, que siguen buscando hasta que suficientes filas pasan tu filtro.
Admite Postgres 13 y posteriores, aunque la 0.9.0, aún sin publicar, deja de admitir la 13 y la 14, y está disponible en casi todos los servicios gestionados de Postgres. La última versión, la 0.8.7 del 1 de octubre de 2026, corrige un fallo de seguridad que puede permitir ejecutar código.
¿Merece la pena pgvector?
pgvector elimina un servicio entero de tu pila. Los embeddings están en la misma base de datos, las mismas copias de seguridad y las mismas transacciones que los documentos que describen, así que no hay un segundo almacén que mantener sincronizado y los filtros son SQL normal. Tiene unas 23.450 estrellas en GitHub y solo 17 incidencias abiertas, y la 0.9.0, aún sin publicar, ya figura en el changelog.
El rango cómodo es más estrecho de lo que sugiere el marketing. Encore, que vende alojamiento de Postgres, lo pone a la par de Pinecone por debajo de unos cinco millones de vectores con carga moderada (cientos de consultas por segundo), y entre cinco y diez millones hace falta ajustar con cuidado shared_buffers, work_mem y los parámetros de HNSW. El almacenamiento explica por qué. El README calcula cada vector en 4 bytes por dimensión más 8, así que diez millones de embeddings de 1.536 dimensiones ocupan unos 61,5 GB antes de cualquier índice, y la construcción de HNSW se ralentiza mucho en cuanto el grafo supera maintenance_work_mem. La media precisión lo reduce a la mitad. Más allá de ese punto, pgvectorscale o VectorChord mantienen los datos en Postgres algo más de tiempo.
El filtrado requiere atención. Los índices aproximados filtran después del escaneo, y el propio ejemplo del README es contundente: con el hnsw.ef_search por defecto de 40 y un filtro que coincide con el 10% de las filas, una consulta devuelve de media unos 4 resultados. Los escaneos iterativos, los índices parciales o la partición por cliente lo resuelven, pero ninguno está activado por defecto.
Las correcciones de seguridad llegaron en 2026 y conviene aplicarlas. La CVE-2026-3172, un desbordamiento de búfer en la construcción paralela de HNSW, permitía a un usuario con permiso para crear índices filtrar datos de otras tablas (de la 0.6.0 a la 0.8.1, corregida en la 0.8.2). La CVE-2026-18022, un desbordamiento al construir IVFFlat solo en sistemas de 32 bits, se corrigió en la 0.8.6, y la CVE-2026-103484, también en la construcción de IVFFlat, puede permitir ejecutar código arbitrario en todas las versiones hasta la 0.8.6 y está corregida en la 0.8.7. En un servicio gestionado, la versión de la extensión sigue el calendario del proveedor y no el tuyo, y esa es la verdadera razón para comprobarla antes de mirar gráficos de benchmarks.
Dónde se gana su sitio
Un ingeniero de backend de una empresa SaaS en Amazon RDS
Añadir búsqueda semántica sobre dos millones de tickets de soporte
Añadir una columna halfvec, rellenar los embeddings, construir un índice HNSW y cruzar los resultados con la tabla de tickets con cláusulas WHERE normales. Con 1.536 dimensiones son unos 6 GB de datos vectoriales, que una instancia algo mayor maneja sin un servicio nuevo que operar.
Un responsable de ingeniería de una start-up B2B con 400 clientes como inquilinos
Mantener separados los documentos de cada cliente en la recuperación de RAG
Particionar la tabla de embeddings por cliente o añadir índices parciales, y activar los escaneos iterativos para que las consultas filtradas devuelvan conjuntos de resultados completos. La seguridad a nivel de fila se aplica como en cualquier tabla, así que el aislamiento usa controles que el equipo ya audita.
Una CTO que estudia la factura de una base de datos vectorial gestionada
Decidir si la búsqueda vectorial necesita su propio proveedor
Por debajo de unos cinco millones de vectores y cientos de consultas por segundo, la recomendación de Encore es quedarse en Postgres: una copia de seguridad, un modelo de acceso, sin trabajos de sincronización. A cambio, hay que dedicar tiempo a ajustar cuando el índice no cabe en memoria.
Antes de decidirte
- Puesta en marcha
- En un Postgres gestionado, ejecuta CREATE EXTENSION vector; autoalojado, instálalo desde el código fuente (make, make install) o con tu gestor de paquetes para Postgres 13 y posteriores. Actualiza con ALTER EXTENSION vector UPDATE en cada base de datos.
- Integraciones
- Cualquier cliente u ORM de Postgres; hay bibliotecas en la mayoría de lenguajes que envuelven el tipo vector. Admitido en los grandes servicios gestionados que recoge la incidencia de proveedores alojados del proyecto, y usado como backend por herramientas de RAG como Open WebUI.
- Datos y privacidad
- Todo se queda dentro de tu instancia de Postgres con sus copias de seguridad, roles y seguridad a nivel de fila; la extensión no envía nada a ningún sitio. La PostgreSQL License no limita el uso comercial.
- Coste a escala
- Sin coste de licencia; pagas una base de datos más grande. Cada vector ocupa 4 bytes por dimensión más 8, así que diez millones de vectores de 1.536 dimensiones necesitan unos 61,5 GB (la mitad como halfvec) más el índice, y la construcción pide un maintenance_work_mem lo bastante grande para contener el grafo.
- Límites
- Límites de índice de 2.000 dimensiones (4.000 en media precisión), filtrado posterior al escaneo que necesita escaneos iterativos, construcción lenta de HNSW cuando se acaba la memoria, sin sharding horizontal, y la 0.9.0 dejará de admitir Postgres 13 y 14.
Lo bueno
- Sin servicio adicional: vectores, filas y transacciones en un solo sitio
- Filtros y joins en SQL normal
- Disponible en casi todos los Postgres gestionados
- PostgreSQL License, permisiva
Lo malo
- Por defecto, las consultas filtradas pueden devolver muchas menos filas de las pedidas
- Solo indexa 2.000 dimensiones con el tipo estándar
- Tres CVE en 2026, una de ellas permite ejecutar código antes de la 0.8.7
- No está hecho para miles de millones de vectores ni tasas de consulta muy altas
Ideal para
Equipos que ya usan Postgres y construyen RAG o búsqueda semántica sobre unos pocos millones de vectores.
Alternativas a pgvector
pgvector: preguntas frecuentes
- ¿Merece la pena pgvector?
- Para la mayoría de equipos que ya usan Postgres, una base de datos vectorial dedicada es infraestructura extra que pgvector hace innecesaria. Le damos un 4.6 sobre 5.
- ¿Cuánto cuesta pgvector?
- Gratis y de código abierto bajo la PostgreSQL License. El único coste es la instancia de Postgres que ya tienes, o una más grande.
- ¿Qué inconvenientes tiene pgvector?
- Por defecto, las consultas filtradas pueden devolver muchas menos filas de las pedidas; solo indexa 2.000 dimensiones con el tipo estándar; tres CVE en 2026, una de ellas permite ejecutar código antes de la 0.8.7; no está hecho para miles de millones de vectores ni tasas de consulta muy altas.
- ¿Para quién es pgvector?
- Equipos que ya usan Postgres y construyen RAG o búsqueda semántica sobre unos pocos millones de vectores.
- ¿Cuánto cuesta pgvector para un equipo o en producción?
- Sin coste de licencia; pagas una base de datos más grande. Cada vector ocupa 4 bytes por dimensión más 8, así que diez millones de vectores de 1.536 dimensiones necesitan unos 61,5 GB (la mitad como halfvec) más el índice, y la construcción pide un maintenance_work_mem lo bastante grande para contener el grafo.
- ¿Es pgvector seguro para los datos de la empresa?
- Todo se queda dentro de tu instancia de Postgres con sus copias de seguridad, roles y seguridad a nivel de fila; la extensión no envía nada a ningún sitio. La PostgreSQL License no limita el uso comercial.
- ¿Cuáles son las mejores alternativas a pgvector?
- Las alternativas más cercanas que hemos analizado son Qdrant, Milvus, Weaviate, LanceDB y Chroma.
Respuestas comprobadas el 23 oct 2026.