我有一个变更集,在我将liquibase-core升级到4.8.0版本后,它不会被执行。
我在这里使用postgres数据库。
失败,出现以下错误:
由:likibase.exception.LiqibaseException:likibase.exception.MigrationFailedException:更改集db/changelog/likibase/release/db.changelog-release-xml 的迁移失败
Reason: liquibase.exception.DatabaseException: ERROR: column "xyz" of relation "abc" is an identity column [Failed SQL: (0) ALTER TABLE abc ALTER COLUMN xyz SET DEFAULT nextval('custom_seq')]
不确定这里出了什么问题。
我该做些什么来纠正这个错误?什么是身份栏?
安"身份;列是自动递增/串行列。错误来自数据库,其中正在运行一个变更集,该变更集试图将默认值设置为nextval('custom_seq')
,但它不喜欢这样。可能是因为它已经在数据库中标记为自动递增/串行/标识。
这可能有几个原因,而且我没有足够的信息来了解这个问题。这听起来确实像是以前的liquibase版本运行的同一个变更日志?
一些潜在的选择:
-
文件路径的配置方式发生了更改。Liquibase不仅通过id和author字段,还通过文件的查找路径来标识每个变更集。如果该路径的配置方式有错误,Liquibase会将其视为一个新的变更集,并重新应用它,这将以";列已经是一个标识";。如果是一个错误导致的,它可能已经在Liquibase的后续版本中修复。
-
为特定更改类型生成的SQL中存在更改。可能是为了使其更加正确,但由于数据库的状态,新SQL由于某种原因而无效。
要帮助区分您的情况,请检查:
- 是什么变更集引发了错误,您希望它现在在您的数据库中运行吗
- 如果没有期望它运行,那么它可能是上面的第一名。日志中显示的路径与该变更集的数据库changelog表中存储的路径有何不同
- 如果您确实期望它运行,那么变更集说应该做什么?变更集实际上无效吗?或者,考虑到您的数据库状态,您会期望它工作吗