dify升级中PostgreSQL数据库字段更新处理
笔记哥 /
04-03 /
0点赞 /
0评论 /
883阅读
# 一、概述
dify运行在容器中,PostgreSQL用的是阿里云,已经运行了很长一段时间。某些表的数据量很大,比如workflowruns表,就有100GB。这个主要是,详细记录了工作流的执行情况,包括执行时间、状态、结果等信息。
版本比较老,0.14.2,需要升级到0.15.3。
升级之前,除了对数据库做备份之外,还需要知道升级过程中,哪些表需要做更新处理。因为某些大表如果要添加字段,索引等操作,非常耗费时间,长达3个小时以上。
为了缩短升级过程,需要对数据库的某些大表,提前进行清理,一些不重要的数据,保留1个月即可。
# 二、代码分析
访问github官网,
下载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: Mapped[int] = 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
```csharp
docker exec -it dify_db_1 /bin/bash
```
导出dify表结构
```csharp
pg_dump -h localhost -p 5432 -U postgres -d dify -s -f dify-0.14.2.sql
```
将文件拷贝出来
```csharp
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
```csharp
docker exec -it dify_db_1 /bin/bash
```
导出dify表结构
```csharp
pg_dump -h localhost -p 5432 -U postgres -d dify -s -f dify-0.15.3.sql
```
将文件拷贝出来
```csharp
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数据库做进一步处理了
本文来自投稿,不代表本站立场,如若转载,请注明出处:http//www.knowhub.vip/share/2/1976
- 热门的技术博文分享
- 1 . ESP实现Web服务器
- 2 . 从零到一:打造高效的金仓社区 API 集成到 MCP 服务方案
- 3 . 使用C#构建一个同时问多个LLM并总结的小工具
- 4 . .NET 原生驾驭 AI 新基建实战系列Milvus ── 大规模 AI 应用的向量数据库首选
- 5 . 在Avalonia/C#中使用依赖注入过程记录
- 6 . [设计模式/Java] 设计模式之工厂方法模式
- 7 . 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
- 8 . SQL 中的各种连接 JOIN 的区别总结!
- 9 . JavaScript 中防抖和节流的多种实现方式及应用场景
- 10 . SaltStack 远程命令执行中文乱码问题
- 11 . 推荐10个 DeepSeek 神级提示词,建议搜藏起来使用
- 12 . C#基础:枚举、数组、类型、函数等解析
- 13 . VMware平台的Ubuntu部署完全分布式Hadoop环境
- 14 . C# 多项目打包时如何将项目引用转为包依赖
- 15 . Chrome 135 版本开发者工具(DevTools)更新内容
- 16 . 从零创建npm依赖,只需执行一条命令
- 17 . 关于 Newtonsoft.Json 和 System.Text.Json 混用导致的的序列化不识别的问题
- 18 . 大模型微调实战之训练数据集准备的艺术与科学
- 19 . Windows快速安装MongoDB之Mongo实战
- 20 . 探索 C# 14 新功能:实用特性为编程带来便利