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

Liquibase无法回滚到指定标签‘1’问题求助

问题分析与解决

问题场景

执行命令:

liquibase rollback --tag=1

出现错误:

Liquibase Open Source 4.27.0 by Liquibase
ERROR: Exception Details
ERROR: Exception Primary Class:  RollbackFailedException
ERROR: Exception Primary Reason:  Could not find tag '1' in the database
ERROR: Exception Primary Source:  4.27.0

Unexpected error running Liquibase: Could not find tag '1' in the database

变更日志(changelog)内容:

-- liquibase formatted sql

-- changeset Jota:1
CREATE TABLE IF NOT EXISTS "Tabela1" ();

-- changeset Jota:tag_before_alter_table
-- tag

-- changeset Jota:2
ALTER TABLE "Tabela1" ADD COLUMN IF NOT EXISTS id INT;

在pgAdmin中查看databasechangelog表,存在3条记录,ID分别为1、tag_before_alter_table和2,符合预期。但重置该表后问题仍未解决。

操作错误点

你混淆了Liquibase标签(Tag)和Changeset的ID这两个概念:

  • 你执行的--tag=1是要求回滚到名为"1"的标签,但你的变更日志里从未创建过这个标签
  • 变更日志中-- changeset Jota:tag_before_alter_table下的-- tag是无效写法,Liquibase要求指定标签名称,正确格式是-- tag:标签名(比如-- tag:before_alter_table),否则这条changeset不会生成任何有效标签
  • 当前databasechangelog表中所有记录的TAG字段应该都是空值,自然找不到名为"1"的标签

正确解决方案

方案1:直接回滚到指定Changeset的状态

如果你想回滚到ID为1的changeset执行后的状态(即撤销后面两个changeset的操作),可以用回滚计数命令:

liquibase rollback-count 2

(因为ID为1之后有2个changeset需要回滚)

方案2:添加有效标签后再回滚

  1. 修改变更日志,为需要标记的位置添加正确的标签:
-- liquibase formatted sql

-- changeset Jota:1
CREATE TABLE IF NOT EXISTS "Tabela1" ();

-- changeset Jota:tag_before_alter_table
-- tag:v1  -- 指定标签名为v1

-- changeset Jota:2
ALTER TABLE "Tabela1" ADD COLUMN IF NOT EXISTS id INT;
  1. 重新执行更新,让标签生效:
liquibase update
  1. 此时可以用标签回滚到标记位置:
liquibase rollback --tag=v1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:26:11