dify升级,PostgreSQL数据库字段更新处理

一、概述

dify运行在容器中,PostgreSQL用的是阿里云,已经运行了很长一段时间。某些表的数据量很大,比如workflowruns表,就有100GB。这个主要是,详细记录了工作流的执行情况,包括执行时间、状态、结果等信息。

版本比较老,0.14.2,需要升级到0.15.3。

升级之前,除了对数据库做备份之外,还需要知道升级过程中,哪些表需要做更新处理。因为某些大表如果要添加字段,索引等操作,非常耗费时间,长达3个小时以上。

为了缩短升级过程,需要对数据库的某些大表,提前进行清理,一些不重要的数据,保留1个月即可。

二、代码分析

访问github官网,https://github.com/langgenius/dify

下载releases对应的版本的代码,0.14.2,0.15.3

得到文件,dify-0.14.2.zip,dify-0.15.3.zip

首先解压文件dify-0.14.2.zip

进入文件夹,dify-0.14.2\api\models

api是基于python flask框架开发的, models里面的python文件,都是数据库表结构文件。

然后解压文件dify-0.15.3.zip,对比2个model文件,发现workflowruns表,确实是有更新的

0.14.2如下:

total_tokens = db.Column(db.Integer, nullable=False, server_default=db.text("0"))

0.15.3 如下:

total_tokens: Mappedint = mapped_column(sa.BigInteger, server_default=sa.text("0"))

直接对比python文件,不够直观,涉及的文件比较多。就算看出来差异了,也不能直接看到具体的表字段是怎么变化的。

接下来,使用sql文件分析,会更加直观一些。

三、sql文件分析

演示环境,我们弄2台服务器,分别运行0.14.2,0.15.3。不需要任何数据库,直接空数据运行都没问题,主要是为了分析表结构。

0.14.2

进入0.14.2版本的容器,找到dify_db_1,进入docker

复制代码
docker exec -it dify_db_1 /bin/bash

导出dify表结构

复制代码
pg_dump -h localhost -p 5432 -U postgres -d dify -s -f dify-0.14.2.sql

将文件拷贝出来

复制代码
docker cp dify_db_1:/dify-0.14.2.sql /tmp/dify-0.14.2.sql

0.15.3

进入0.15.3版本的容器,找到dify_db_1,进入docker

复制代码
docker exec -it dify_db_1 /bin/bash

导出dify表结构

复制代码
pg_dump -h localhost -p 5432 -U postgres -d dify -s -f dify-0.15.3.sql

将文件拷贝出来

复制代码
docker cp dify_db_1:/dify-0.15.3.sql /tmp/dify-0.15.3.sql

对比差异

使用VsCode编辑器对比2个文件,dify-0.14.2.sql,dify-0.15.3.sql

差异如下:

左边是0.14.2,右边是0.15.3

新增表child_chunks

新增表data_source_oauth_bindings

比较关心的表workflowruns,确实发生了变化。

0.14.2版本total_tokens字段是int类型

0.15.3版本total_tokens字段是bigint类型

child_chunks表添加一个主键约束,确保 id 列中的值是唯一的。

dataset_auto_disable_logs表添加一个主键约束,确保 id 列中的值是唯一的。

child_chunks表添加组合索引child_chunk_dataset_id_idx

dataset_auto_disable_logs表添加索引dataset_auto_disable_log_created_atx,dataset_auto_disable_log_dataset_idx,dataset_auto_disable_log_tenant_idx

知道以上这些差异之后,就可以对生产PostgreSQL数据库做进一步处理了

相关推荐
码上解惑2 天前
从 Dify 工作流说起:常用节点怎么选、怎样组合?
java·人工智能·ai·agent·dify·智能体·spring ai
独码侠4 天前
Dify 开源深度实践:从企业部署到二次开发的全景拆解
知识库·dify·rag·ai工作流
青霄5 天前
Dify--sandbox沙盒
dify·sandbox
大龄码农有梦想8 天前
Dify、RAGFlow 与智能体平台的知识库,哪个更好用
人工智能·dify·ai agent·智能体·ai知识库·ai工作流·智能体开发平台
小宋102119 天前
Dify 前后端联调踩坑记录:`/console/api/account/profile` 登录失败排查
人工智能·dify
gc_22991 个月前
学习在Windows中基于Docker部署Dify的步骤
windows·docker·dify
User_芊芊君子1 个月前
蓝耘元生代×魔珐星云:我用蓝耘MaaS大模型搭建一款共情具身智能数字人
人工智能·dify·蓝耘
腾飞开源1 个月前
05_Dify接入Ollama本地大模型
人工智能·项目实战·dify·ai智能体·ollama·企业级应用·接入模型
腾飞开源1 个月前
06_Dify接入阿里云百炼API大模型
人工智能·项目实战·dify·ai智能体·ai应用开发·阿里云百炼·接入大模型
m_sophia1 个月前
Dify整合MCP查询火车票
dify