必须停用所有dify服务后,将sqlite导出为sql,经语法转换(如integer→serial、datetime→timestamptz)、时区与全文索引适配,再导入postgresql;更新.env及docker-compose.yml中数据库连接配置,重启服务完成迁移。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

将Dify数据从默认嵌入式SQLite迁移至外部独立PostgreSQL数据库,是支撑高并发、多租户和生产级审计的必要步骤,必须确保元数据结构完整、时区语义一致、全文索引可重建。
确认源库状态与目标环境就绪
进入Dify部署目录,执行docker-compose ps,确认dify-api和postgresql容器均处于Up状态;若当前使用SQLite,则postgresql容器应不存在或未启动——这是迁移前提。【必须停用所有Dify服务再操作,否则可能触发写锁导致数据不一致】
在Linux服务器上验证PostgreSQL实例可达:运行psql -h 192.168.5.100 -U dify_user -d dify_production,输入密码后出现dify_production=>提示符即表示网络与认证通路正常。
导出SQLite结构与数据
定位Dify挂载的SQLite文件路径,通常为./volumes/db/data/dify.db。
使用SQLite3命令行工具导出全量schema和数据:sqlite3 ./volumes/db/data/dify.db ".dump" > dify_dump.sql。
这一步生成的SQL含大量CREATE TABLE和INSERT语句,但直接导入PostgreSQL会失败——SQLite语法宽松(如允许INTEGER PRIMARY KEY AUTOINCREMENT),而PostgreSQL要求显式声明SERIAL或GENERATED ALWAYS AS IDENTITY。
转换SQL语法并适配PostgreSQL特性
方法一:使用开源工具sqlite3-to-postgres自动转换
安装并执行:npx sqlite3-to-postgres --input dify_dump.sql --output dify_pg.sql --db-name dify_production。该工具会自动处理TEXT → VARCHAR(255)、BOOLEAN → BOOLEAN、DATETIME → TIMESTAMPTZ等映射,并将SQLite的strftime('%Y-%m-%d %H:%M:%S', ...)替换为PostgreSQL的to_char(..., 'YYYY-MM-DD HH24:MI:SS')。
方法二:手动修正关键字段(仅限小规模调试)
打开dify_dump.sql,搜索CREATE TABLE datasets,将其中id TEXT PRIMARY KEY改为id UUID PRIMARY KEY DEFAULT gen_random_uuid();检查所有含created_at的表,确保其类型为TIMESTAMPTZ NOT NULL DEFAULT NOW(),而非SQLite的TEXT。
【务必在PostgreSQL中提前启用pgcrypto扩展:CREATE EXTENSION IF NOT EXISTS "pgcrypto"; 否则gen_random_uuid()函数不可用】
初始化目标PostgreSQL并导入数据
第一步:登录目标PostgreSQL,创建专用数据库与用户CREATE DATABASE dify_production OWNER dify_user;GRANT ALL PRIVILEGES ON DATABASE dify_production TO dify_user;
第二步:切换至新库,执行转换后的SQL文件\c dify_production\i /path/to/dify_pg.sql
第三步:校验核心表记录数是否匹配
在SQLite中执行:SELECT COUNT(*) FROM datasets;
在PostgreSQL中执行相同语句,结果必须完全一致;若差1条,大概率是sqlite_sequence元数据表被误导入,需手动删除。
更新Dify配置指向新数据库
修改.env文件中的数据库连接字符串:
将SQLALCHEMY_DATABASE_URI=sqlite:///./volumes/db/data/dify.db
替换为SQLALCHEMY_DATABASE_URI=postgresql://dify_user:your_password@192.168.5.100:5432/dify_production。
若Dify部署在Docker中,还需同步更新docker-compose.yml内dify-api服务的environment段,确保环境变量生效。
重启全部服务:docker-compose down && docker-compose up -d。











