postgresql 上不允许 addAfterColumn

问题描述 投票:0回答:4

为了修复漏洞,我升级了 dockerfile 中的 docker 镜像版本:

旧:

FROM liquibase/liquibase:4.4

FROM liquibase/liquibase:4.20

但是我开始遇到错误:

addAfterColumn is not allowed on postgresql

我开始调查这个错误,发现在一些变更集中使用了

addAfterColumn

<changeSet author="***" id="***">
    <addColumn tableName="my_table" >
      <column afterColumn="existing_column"
        name="new_column"
        type="varchar(255)" >
        <constraints nullable="true"/>
      </column>
    </addColumn>
  </changeSet>
</databaseChangeLog>

我也发现了这个话题:

https://github.com/liquibase/liquibase/issues/3091

所以我刚刚删除了

afterColumn
,但我不确定我会遇到什么副作用?我不熟悉使用
afterColumn
的原因,但如果将其删除,它可能毫无用处,但我找不到任何有用的信息。

还有其他选项可以解决该问题吗?因为编辑 liquibase 脚本会破坏现有数据库的校验和

java postgresql docker dockerfile liquibase
4个回答
2
投票

删除“afterColumn”,以便它在新的 ENV 中工作。 为了避免在已执行更改集的 ENV 中验证失败,添加原始校验和有效:

  <changeSet>
    <validCheckSum>9:6a4c63a04890c57dd610abc39389b4ce</validCheckSum>
        or
    <validCheckSum>ANY</validCheckSum>

1
投票

此拉取请求所示,之前 liquibase 没有警告可能不应用列排序,因为数据库不支持它。因此,它在旧版本中默默失败,但现在显示错误。引用最重要的一句话:

重大更改:因为我修复了验证逻辑,所以任何在不支持该功能的数据库的 addColumn 上具有 beforeColumn 或 afterColumn 或位置属性的人现在都会收到验证错误,而不是被忽略。


0
投票

您可以尝试从这里使用

modifySql
提出建议: https://github.com/liquibase/liquibase/issues/3094#issuecomment-1195961510

<changeSet id="***" author="***">
    <addColumn tableName="my_table">
        <column name="new_column" type="varchar(255)"/>
    </addColumn>
    <modifySql dbms="postgresql">
        <append value=" position 4"/>
    </modifySql>
</changeSet>

看起来像在 liquibase 4.13 https://github.com/liquibase/liquibase/pull/2943 他们修复了一些不需要修复的东西https://github.com/liquibase/liquibase/ issues/3091 他们正在尝试增强/修复自己的修复。除了破坏向后兼容性(如 @gstackoverflow 在评论中所写)之外,当产品支持多种类型的数据库时,它还会破坏逻辑(对于 mySQL 没有错误,对于 Oracle/MsSQL/PostgreSQL 错误)。


0
投票

Liquibase 4.24.0 引入了

removeChangeSetProperty
来解决此问题。因此,根据您的情况,解决方法是:

<removeChangeSetProperty change="addColumn" remove="afterColumn" dbms="postgresql" />

请记住,应将此行添加到使用

afterColumn
的所有变更日志中。有一个功能请求让它与
include
includeAll
一起使用,因此可以只声明一次:https://github.com/liquibase/liquibase/issues/5290

截至撰写本文时,即 2023 年 12 月 24 日,该问题尚未解决。

© www.soinside.com 2019 - 2024. All rights reserved.