必须完成网络可达性、权限最小化、JDBC语法合规性三重校验:确认PostgreSQL服务运行,创建只读用户dify_reader并授权CONNECT、USAGE及各表SELECT权限,Dify中Database节点配置jdbc:postgresql://127.0.0.1:5432/analytics?currentSchema=public&sslmode=disable,SQL用?占位并严格匹配输入变量顺序,预览运行返回JSON即成功。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Dify中让业务人员用自然语言提问,直接从本地PostgreSQL数据库查出结果并展示,必须先完成只读查询通道的对接——这不是简单填个地址就能通的配置,而是涉及网络可达性、权限最小化、JDBC语法合规性三重校验的实操过程。
确认PostgreSQL服务状态与访问权限
在本地终端执行 sudo systemctl status postgresql,确保服务状态为 active (running)。若显示 inactive,运行 sudo systemctl start postgresql 启动。
切换到postgres系统用户:sudo -u postgres psql,进入后执行 \l 查看数据库列表,确认目标库(如 analytics)存在且非模板库。若不存在,用 CREATE DATABASE analytics; 创建。
创建专用只读用户:CREATE USER dify_reader WITH PASSWORD 'r3ad0nly!2026';,然后执行 GRANT CONNECT ON DATABASE analytics TO dify_reader; 和 GRANT USAGE ON SCHEMA public TO dify_reader;。最后对每张需查询的表执行 GRANT SELECT ON TABLE users TO dify_reader;——【跳过这一步将导致Dify节点报错“permission denied for table”】。
配置Dify工作流中的Database节点
进入Dify控制台→打开任一应用→「编排工作流」→点击画布空白处→搜索“database”→拖入Database节点。
双击节点打开配置面板,将「Database Type」下拉菜单切换为 PostgreSQL。
在「Connection URL」栏填写完整JDBC格式地址:jdbc:postgresql://127.0.0.1:5432/analytics?currentSchema=public&sslmode=disable。注意:localhost在Docker容器内不可达,必须用 127.0.0.1;sslmode=disable 是本地开发环境必需参数,否则连接会卡住。
「Operation Type」选择 Query,在「SQL Statement」中输入带参数占位符的语句,例如:SELECT id, name, email FROM users WHERE status = ? AND created_at > ?。问号数量必须与后续输入变量严格一致。
绑定输入变量并测试查询
第一步:在Database节点右侧「Input Variables」区域点击「+ Add Variable」,依次添加两个变量:
• 名称填 status,类型选 string,默认值设为 active
• 名称填 start_date,类型选 string,默认值设为 2026-01-01
第二步:确保变量顺序与SQL中问号出现顺序完全一致——第一个问号对应 status,第二个对应 start_date。顺序错位会导致字段类型不匹配报错。
第三步:点击右上角「预览」按钮,在弹出窗口中点击「Run」。若返回JSON格式结果(如 [{"id":1,"name":"Alice","email":"a@example.com"}]),说明只读查询通路已建立成功。










