必须将PostgreSQL配置为pgvector向量数据库,否则Dify知识库无法生成嵌入向量、RAG检索返回空结果;需创建专用数据库与用户、启用vector扩展、正确配置.env中PGVECTOR参数并验证连接与索引。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Dify中启用语义搜索能力,必须将自建PostgreSQL实例配置为pgvector向量数据库,否则知识库切片无法生成嵌入向量、RAG检索将始终返回空结果。
准备PostgreSQL实例并启用pgvector扩展
登录你的Linux服务器(非Docker部署),切换至postgres系统用户:【必须使用postgres用户执行CREATE EXTENSION,普通用户无权限】
连接目标数据库(例如dify_vectors):psql -U postgres -d dify_vectors
执行扩展安装命令:CREATE EXTENSION IF NOT EXISTS vector;
若报错“extension 'vector' does not exist”,说明pgvector未编译安装——需先在PostgreSQL源码目录下运行make && sudo make install,再重启postgresql服务。跳过此步会导致后续所有向量化操作失败且无明确报错提示。
创建专用数据库与权限账号
方法一:SQL命令行方式
CREATE DATABASE dify_vectors;
\c dify_vectors
CREATE USER dify_user WITH PASSWORD 'Zx9#kL2$mNpQ';
GRANT ALL PRIVILEGES ON DATABASE dify_vectors TO dify_user;
GRANT ALL ON SCHEMA public TO dify_user;
方法二:pgAdmin图形界面操作
右键“Databases”→“Create”→“Database”,填入名称dify_vectors;右键“Login/Group Roles”→“Create”→“Login/Group Role”,用户名填dify_user,密码设强口令,勾选“Can login”和“Createdb”;最后在dify_vectors数据库的“Properties”→“Privileges”中添加dify_user并赋予全部权限。
配置Dify环境变量启用pgvector
第一步:打开Dify项目根目录下的.env文件
第二步:定位到向量数据库配置段,注释掉默认Weaviate配置行(# VECTOR_STORE=weaviate)
第三步:取消以下四行的注释,并按实际填写:
VECTOR_STORE=pgvector
PGVECTOR_HOST=your-pg-instance.tencentcdb.com
PGVECTOR_PORT=5432
PGVECTOR_USER=dify_user
PGVECTOR_PASSWORD=Zx9#kL2$mNpQ
PGVECTOR_DATABASE=dify_vectors
【PGVECTOR_PASSWORD中若含$、#、/等shell特殊字符,必须用单引号包裹整个密码值,否则docker-compose启动时会解析失败】
验证pgvector连接与索引创建
重启Dify服务:docker-compose down → docker-compose up -d
查看dify-api容器日志:docker logs -f dify-api | grep -i "vector"
正常应出现“Connected to pgvector at host:port”及“HNSW index created on collection_xxx”字样。
手动检查pgvector表结构:psql -U dify_user -d dify_vectors -c "\dt",确认存在embedding_store或类似命名的向量表;再执行\di查看是否已自动创建hnsw_embedding_idx索引。
若日志中持续出现“Connection refused”或“password authentication failed”,请立即检查PGVECTOR_HOST是否可被Docker网络访问(宿主机IP不能写127.0.0.1)、防火墙是否放行5432端口、postgres.conf中listen_addresses是否包含'*'、pg_hba.conf是否添加host all all 0.0.0.0/0 md5规则。










