You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ThingsBoard CE从3.4.4升级至3.5.x时Schema更新失败求助

ThingsBoard CE 3.4.4升级至3.5.x故障排查与解决方案

一、先搞定PostgreSQL端口占用问题

日志里的端口占用是核心诱因——数据库起不来,Schema更新肯定失败。

  • 先查谁占了5432端口:
    • 用docker ps看正在跑的容器,找到占用5432的容器,docker stop <容器ID>直接停掉。
    • 如果是宿主机进程搞的,Linux下lsof -i :5432找PID,再kill -9 <PID>;Windows用netstat -ano | findstr :5432抓PID,去任务管理器结束进程。
  • 升级前检查docker-compose.yml里postgres的端口映射,确保5432:5432没和宿主机其他服务冲突。

二、修复Schema更新失败与'notification_target'表缺失问题

1. 先回退到正常的3.4.4版本

得先确保原数据库没损坏:

  • 停掉现在故障的升级容器:docker stop thingsboard
  • 启动3.4.4版本容器,确认能正常访问、数据没问题:
    docker run -d --name thingsboard -p 8080:8080 -p 1883:1883 -p 5683:5683/udp -v ~/.mytb-data:/data -v ~/.mytb-logs:/var/log/thingsboard thingsboard/tb-postgres:3.4.4
    
  • 进容器查数据库状态:docker exec -it thingsboard psql -U postgres -d thingsboard,输\dt确认所有表都在,别缺东西。

2. 严格按官方分步升级(3.4.4 → 3.5.0 → 3.5.1)

跳版本升级必然导致Schema脚本执行不全,表缺失是大概率事件:

  • 先备份3.4.4的数据库:
    docker exec -it <postgres容器ID> pg_dump -U postgres thingsboard > tb_backup_3.4.4.sql
    
  • 停掉3.4.4的容器,跑3.5.0的升级脚本,指定源版本:
    docker run -it --rm -v ~/.mytb-data:/data -v ~/.mytb-logs:/var/log/thingsboard -v ~/.mytb-conf:/config thingsboard/tb-postgres:3.5.0 upgrade --fromVersion=3.4.4
    
  • 别中途断容器,等脚本跑完。如果再出现'ERROR: canceling statement due to user request',试试:
    • 进postgres容器改postgresql.conf,把statement_timeout设为0(禁用语句超时),然后重启postgres服务。
  • 3.5.0升级完,启动正常容器确认能访问:
    docker run -d --name thingsboard -p 8080:8080 -p 1883:1883 -p 5683:5683/udp -v ~/.mytb-data:/data -v ~/.mytb-logs:/var/log/thingsboard thingsboard/tb-postgres:3.5.0
    
  • 再重复备份、升级流程,从3.5.0升到3.5.1:
    docker run -it --rm -v ~/.mytb-data:/data -v ~/.mytb-logs:/var/log/thingsboard -v ~/.mytb-conf:/config thingsboard/tb-postgres:3.5.1 upgrade --fromVersion=3.5.0
    

3. 手动补'notification_target'表

要是升级后还是缺这个表,直接手动建(表结构匹配3.5.x):

  • 进postgres数据库:docker exec -it <postgres容器ID> psql -U postgres -d thingsboard
  • 执行以下SQL:
    CREATE TABLE notification_target (
        id uuid NOT NULL,
        created_time bigint NOT NULL,
        tenant_id uuid,
        customer_id uuid,
        user_id uuid,
        target_type varchar(255) NOT NULL,
        target_config jsonb NOT NULL,
        PRIMARY KEY (id)
    );
    CREATE INDEX idx_notification_target_tenant_id ON notification_target(tenant_id);
    CREATE INDEX idx_notification_target_customer_id ON notification_target(customer_id);
    CREATE INDEX idx_notification_target_user_id ON notification_target(user_id);
    
  • 建完重启ThingsBoard容器就行。

三、后续避坑提醒

  • 升级前必备份数据库,别嫌麻烦。
  • 严格按官方版本路径升级,别跳级。
  • 升级过程中别关终端、别断网,让脚本跑完。
  • 给Docker分配足够的CPU和内存,资源不够也会导致脚本超时被取消。

内容的提问来源于stack exchange,提问作者Aslanbek Aitbaev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:15:10