Dify 的拖拉拽界面用起来确实很直观,但如果你是想做深度开发或者二次集成,光在界面上点来点去可不够。很多关键数据、配置信息,其实都藏在后台的数据库里。想要真正摸透 Dify 的底层逻辑,直接跟数据库打交道必不可少。今天这篇,我们就以 Dify 最核心的关系型数据库——PostgreSQL 为例,带大家把 Dify 背后的数据库服务看个明白。
1. Dify 到底用了哪些数据库?
翻一翻 Dify 的 .env 配置文件,你会发现它并不是“单打独斗”,而是组合了三类数据库服务,各司其职:
PostgreSQL(主关系型数据库)
- 作用:作为核心数据库,所有用户、应用、工作流这类结构化数据都存在这里。
- 主要配置项:用户名、密码、主机地址、端口、数据库名。
- 连接池配置:最大连接数 30,连接回收时间 3600 秒。
Redis(缓存与消息中间件)
- 作用:负责缓存数据,以及处理实时对话中的发布/订阅消息。
- 配置参数:主机地址、端口、密码、数据库编号。
- 支持模式:哨兵模式和集群模式(默认未启用)。
向量数据库(默认为 Wea viate)
- 作用:专门用来存储向量数据,做相似性检索。
- 配置内容:服务端点 URL 和 API 密钥。
- 扩展能力:支持 Qdrant、Milvus、PGVector 等多种选项。
这三者加在一起,构成了 Dify 完整的数据基础设施:结构化数据管理、缓存加速、语义级搜索,各有分工。
2. 怎么进 PostgreSQL 数据库看看?
⚠️ 默认你已经成功安装并运行了 Dify。如果还没安装,建议先参考 Dify 的安装配置教程。
想操作 PostgreSQL 数据库,走这三步就行:找到配置 → 开端口映射 → 连接数据库。
2.1 找到数据库配置
.env文件路径:dify/docker/.env
DB_USERNAME=postgres # PostgreSQL数据库用户名
DB_PASSWORD=difyai123456 # PostgreSQL数据库密码
DB_HOST=db # PostgreSQL数据库主机地址
DB_PORT=5432 # PostgreSQL数据库端口号
DB_DATABASE=dify # PostgreSQL数据库名称
拉取 Dify 仓库后,这些默认配置一般不用动。
2.2 新增数据库服务的端口映射
文件路径:dify/docker/docker-compose.yaml
在 docker-compose.yaml 文件的 "db" 服务下,手动加上 5432 端口映射。
注意:主机端口可以自己改,但容器内的端口必须跟 .env 里的 DB_PORT 保持一致。
services:
api:
worker:
web:
db:
image: postgres:15-alpine
restart: always
ports:
- "5432:5432" # 新增db服务的端口映射(主机端口5432:容器端口5432)
简单来说,端口映射就是把容器内部的 5432 端口“暴露”出来,绑定到宿主机的 5432 端口。这样一来,外部工具就能通过宿主机来访问容器里的 PostgreSQL 了。
改完配置,重启 Dify 服务让修改生效:
sudo docker compose down
sudo docker compose up -d
2.3 连接数据库
打开你常用的数据库管理工具,比如 DBea ver。新建一个 PostgreSQL 连接,把数据库名、端口、用户名和密码填进去,测试连接,通了就行。
连接成功后,就能看到 PostgreSQL 数据库下面有很多表。
这里列几个大家可能会经常用到的表:
| 表名 | 作用 |
| app | 存储工作流应用的基本信息 |
| api_tokens | 存储各个应用对应的 API 密钥 |
| embedding | 存储向量嵌入的 embedding 信息 |
| upload_files | 存储上传文件的所有信息,比如文件路径、文件 ID 等 |
你平时开发会用上哪张表?实践出真知,多操作自然就熟悉了。
