为了账号安全,请及时绑定邮箱和手机立即绑定

如果表存在则跳过 liquibase 更改

如果表存在则跳过 liquibase 更改

GCT1015 2023-06-14 14:32:03
liquibase 的新手。我有一个由休眠管理的现有架构。我现在需要删除一些表,我正在使用 liquibase。我写了一个成功删除表的配置。但我希望检查仅在表存在时运行,因为新安装的系统不会有表,因为休眠映射对象不再存在。我试图添加一个先决条件。但是,我的日志仍然表明 liquibase 失败,因为它试图删除该表但它不存在。我做错了什么?我正在使用 Spring Boot / JavadatabaseChangeLog:  - preConditions:      on-fail: mark_ran      on-error: mark_ran      tableExists:        tableName: some_old_table        schemaName: public  - changeSet:      id: 01_del_old_table      author: some-dev-01      comment: Remove old table      changes:        - dropTable:            tableName: some_old_table日志中的错误:表 public.some_old_table 不存在 ...PreconditionFailedException这就像 ti 正在检查先决条件……但仍然没有通过。也试过databaseChangeLog:  - changeSet:      id: zzchange-1.0-remove-xczczxc      author: zzzz      comment: Remove some_old_table table - no longer needed      preConditions:        on-fail: mark_ran        tableExists:          tableName: some_old_table      changes:        - dropTable:            tableName: some_old_table
查看完整描述

3 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

问题在于on-fail属性拼写不正确。on-fail应该是onFail。

最好将先决条件置于特定更改集的范围内,并且注释应该在先决条件之后进行,尽管这不是这里的问题。


databaseChangeLog:

  - changeSet:

      id: zzchange-1.0-remove-xczczxc

      author: zzzz

      preConditions:

        onFail: mark_ran

        tableExists:

          tableName: some_old_table

      comment: Remove some_old_table table - no longer needed

      changes:

        - dropTable:

            tableName: some_old_table


查看完整回答
反对 回复 2023-06-14
?
心有法竹

TA贡献1866条经验 获得超5个赞

在你的第二次尝试中,在你的先决条件之后发表你的评论


databaseChangeLog:

  - changeSet:

      id: zzchange-1.0-remove-xczczxc

      author: zzzz

      preConditions:

        on-fail: mark_ran

        tableExists:

          tableName: some_old_table

      comment: Remove some_old_table table - no longer needed

      changes:

        - dropTable:

            tableName: some_old_table


我不太确定为什么您的第一次尝试行不通,但是我认为拥有全局先决条件不是一个好主意。这是因为他们在同一文档中所说的:


Preconditions at the changelog level apply to all changesets, not just those listed in the current changelog or its child changelogs.



查看完整回答
反对 回复 2023-06-14
?
哔哔one

TA贡献1854条经验 获得超8个赞

请使用以下语法跳过当前表中的更改

CREATE table IF NOT EXISTS


查看完整回答
反对 回复 2023-06-14
  • 3 回答
  • 0 关注
  • 298 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信