一、概述

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: 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

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数据库做进一步处理了

dify升级,PostgreSQL数据库字段更新处理的更多相关文章

  1. db2数据库字段更新当前时间

    db2数据库中想要将字段的时间通过sql语句的方式更新: 例如: Update tablename set 字段1='打酱油', 字段2 = TO_CHAR(current timestamp,'YY ...

  2. 【EF】EntityFramework 更新数据库字段的三种方法

    实体类 public class TestDbContext : DbContext { public DbSet<Test> Tests { get; set; } public Tes ...

  3. 关于EF更新数据库,更新指定字段的设置

    1.关于EF跟新数据库更新指定字段的设置 在EF提交到数据库的时候或许某些字段不想更新.或者自己更新一个模型到数据库去! 1.更新数据不更新一些字段 /// <summary> /// 数 ...

  4. 【hibernate postgresql】注解@TypeDef/@Enumerated/数据库字段gender为枚举类型,从前台接受到实体后进行保存报错:org.postgresql.util.PSQLException: ERROR: column "gender" is of type gender but expression is of type character varying

    数据库字段gender为枚举类型,从前台接受到实体后进行保存报错:org.postgresql.util.PSQLException: ERROR: column "gender" ...

  5. Python numpy插入、读取至postgreSQL数据库中bytea类型字段

    安装psycopg2模块,此模块用于连接PostgreSQL数据库 ​pip install psycopg2 # -*- coding: utf-8 -*- import psycopg2 impo ...

  6. 【Jhipster】升级/修改 数据库结构

    前提 1.jhipster环境,jdk1.8,yeoman,node.js安装环境参考官方wiki,环境问题参考我的博客,如果出现注册中心空白页,请参考博客 2.首先需要启动jhipster基础服务, ...

  7. PostgreSQL介绍以及如何开发框架中使用PostgreSQL数据库

    最近准备下PostgreSQL数据库开发的相关知识,本文把总结的PPT内容通过博客记录分享,本随笔的主要内容是介绍PostgreSQL数据库的基础信息,以及如何在我们的开发框架中使用PostgreSQ ...

  8. android开发--数据库(更新或者降低版本)

    Andoird的SQLiteOpenHelper类中有一个onUpgrade方法. 1. 帮助文档里说的"数据库升级"是指什么? 你开发了一个应用,当前是1.0版本.该程序用到了数 ...

  9. C#访问postgresql数据库

    最近开始做C#的DotNet的工作,因为对PostgreSQL数据库比较有兴趣,所以自己研究了一下如何访问PostgreSQL的 数据库的问题. 1.为了访问PostgreSQL数据库,需要从pgfo ...

  10. 【转】使用PowerDesigner的建模创建升级管理数据库

    使用PowerDesigner的建模创建升级管理数据库 PowerDesigner是一种著名的CASE建摸工具,最开始为数据库建模设计,即物理模型(Physical Data Model)用于生成数据 ...

随机推荐

  1. 153:从shell提示符编辑文本文件

  2. linux实现人脸识别锁定解锁

    环境 archlinux 桌面管理器i3wm 登录管理器 slim python 3.10.4 dlib pip install --user -i https://pypi.tuna.tsinghu ...

  3. 解锁数据潜力,天翼云TeleDB为企业数智蝶变添力赋能!

    近日,第15届中国数据库技术大会(DTCC2024)在北京召开.大会以"自研创新 数智未来"为主题,重点围绕向量数据库与向量检索技术实践.数据治理与数据资产管理.云原生数据库开发与 ...

  4. 异常:java.lang.reflect.InvocationTargetException

    在产生这个问题的时候,以为是代码某个类又改动了.但是对比了git,发现并没有改动,测试环境代码照跑,故又重新拉了一份重新部署,仍然报同样的错.解决过程中,试了以下网上各种方法,均无效果. 1.包重复. ...

  5. 五分钟搭建属于你的AI助手:Ollama+DeepSeek+AnythingLLM深度整合教程

    作者简介 微信公众号:密码应用技术实战 博客园首页:https://www.cnblogs.com/informatics/ GitHub地址:https://github.com/warm3snow ...

  6. 深入剖析Vue框架:从基础到未来趋势

    深入剖析Vue框架:从基础到未来趋势 Vue 框架简介 Vue.js 是一款用于构建用户界面的 JavaScript 框架 ,它基于标准 HTML.CSS 和 JavaScript 构建,并提供了一套 ...

  7. 数据同步-同步mysql到iceberg后如何确定数据一致性

    一.数据打快照做数据比较 1.mysql创建快照 优点:可以选择时间做快照,然后对比 缺点:需要额外的存储空间和处理时间,不好自动化,大表做快照成本高 2.实现方式 create database 快 ...

  8. 修改本机host文件后,浏览器访问还是旧的网址

    一.修改本机host文件后也会遇到修改hosts不生效的情况,而且有时生效,有时不生效情况 1.DNS缓存机制 一条域名的DNS记录会在本地有两种缓存,浏览器缓存和操作系统(OS)缓存.在浏览器中访问 ...

  9. 1 使用ollama完成DeepSeek本地部署

    1 ollama 1.1 什么是ollama ollama是一个开源的 LLM(大型语言模型)服务工具,用于简化在本地运行大语言模型,降低使用大语言模型的门槛,使得大模型的开发者.研究人员和爱好者能够 ...

  10. Memcached深度剖析:解锁高性能分布式内存缓存的秘密

    引言 在当今快节奏的互联网世界中,应用程序的响应速度往往是用户体验的关键.为了提升性能,减轻数据库的压力,Memcached作为一种高性能的分布式内存对象缓存系统,被广泛应用于加速动态Web应用程序. ...