In a scenario where more complex check constraints are defined on a table, for example:
ALTER TABLE catalog.schema.table
ADD CONSTRAINT complex_constraint
CHECK (
(column_a = 'x' AND column_b IN ('value_a', 'value_b', 'value_c'))
OR (column_a = 'y' AND column_b IN ('value_a', 'value_c'))
OR (column_a = 'z' AND column_b IN ('value_a', 'value_c'))
);
the generate changelog command throws following error, unable to finish the command successfully:
[2025-09-30 16:03:01] SEVERE [liquibase.integration] Duplicate key 'value_c')) OR (column_a (attempted merging values 'y' AND column_b IN ('value_a' and 'z' AND column_b IN ('value_a')
liquibase.exception.CommandExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.IllegalStateException: Duplicate key 'value_c')) OR (column_a (attempted merging values 'y' AND column_b IN ('value_a' and 'z' AND column_b IN ('value_a')
at liquibase.command.CommandScope.execute(CommandScope.java:258)
at liquibase.integration.commandline.CommandRunner.call(CommandRunner.java:51)
at liquibase.integration.commandline.CommandRunner.call(CommandRunner.java:21)
at picocli.CommandLine.executeUserObject(CommandLine.java:2045)
at picocli.CommandLine.access$1500(CommandLine.java:148)
at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2465)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2457)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2419)
at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2277)
at picocli.CommandLine$RunLast.execute(CommandLine.java:2421)
at picocli.CommandLine.execute(CommandLine.java:2174)
at liquibase.integration.commandline.LiquibaseCommandLine.lambda$execute$2(LiquibaseCommandLine.java:404)
at liquibase.Scope.child(Scope.java:200)
at liquibase.Scope.child(Scope.java:176)
at liquibase.integration.commandline.LiquibaseCommandLine.lambda$execute$3(LiquibaseCommandLine.java:379)
at liquibase.Scope.child(Scope.java:200)
at liquibase.Scope.child(Scope.java:176)
at liquibase.integration.commandline.LiquibaseCommandLine.execute(LiquibaseCommandLine.java:376)
at liquibase.integration.commandline.LiquibaseCommandLine.main(LiquibaseCommandLine.java:97)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
at liquibase.integration.commandline.LiquibaseLauncher.main(LiquibaseLauncher.java:116)
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.IllegalStateException: Duplicate key 'value_c')) OR (column_a (attempted merging values 'y' AND column_b IN ('value_a' and 'z' AND column_b IN ('value_a')
at liquibase.diff.output.changelog.DiffToChangeLog.print(DiffToChangeLog.java:235)
at liquibase.diff.output.changelog.DiffToChangeLog.print(DiffToChangeLog.java:125)
at liquibase.command.core.GenerateChangelogCommandStep.run(GenerateChangelogCommandStep.java:155)
at liquibase.command.CommandScope.execute(CommandScope.java:220)
... 23 more
Caused by: java.lang.RuntimeException: java.lang.IllegalStateException: Duplicate key 'value_c')) OR (column_a (attempted merging values 'y' AND column_b IN ('value_a' and 'z' AND column_b IN ('value_a')
at liquibase.diff.output.changelog.DiffToChangeLog$1.run(DiffToChangeLog.java:218)
at liquibase.Scope.lambda$child$0(Scope.java:191)
at liquibase.Scope.child(Scope.java:200)
at liquibase.Scope.child(Scope.java:190)
at liquibase.Scope.child(Scope.java:169)
at liquibase.diff.output.changelog.DiffToChangeLog.print(DiffToChangeLog.java:171)
... 26 more
Caused by: java.lang.IllegalStateException: Duplicate key 'value_c')) OR (column_a (attempted merging values 'y' AND column_b IN ('value_a' and 'z' AND column_b IN ('value_a')
at java.base/java.util.stream.Collectors.duplicateKeyException(Collectors.java:135)
at java.base/java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1(Collectors.java:182)
at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at liquibase.ext.databricks.diff.output.changelog.ChangedTblPropertiesUtil.convertToMapExcludingDeltaParameters(ChangedTblPropertiesUtil.java:116)
at liquibase.ext.databricks.diff.output.changelog.ChangedTblPropertiesUtil.getFilteredTblProperties(ChangedTblPropertiesUtil.java:123)
at liquibase.ext.databricks.diff.output.changelog.MissingTableChangeGeneratorDatabricks.fixMissing(MissingTableChangeGeneratorDatabricks.java:36)
at liquibase.diff.output.changelog.ChangeGeneratorChain.fixMissing(ChangeGeneratorChain.java:44)
at liquibase.diff.output.changelog.ChangeGeneratorFactory.fixMissing(ChangeGeneratorFactory.java:94)
at liquibase.diff.output.changelog.DiffToChangeLog.generateChangeSets(DiffToChangeLog.java:334)
at liquibase.diff.output.changelog.DiffToChangeLog.printNew(DiffToChangeLog.java:258)
at liquibase.diff.output.changelog.DiffToChangeLog$1.run(DiffToChangeLog.java:177)
... 31 more
Unexpected error running Liquibase: Duplicate key 'value_c')) OR (column_a (attempted merging values 'y' AND column_b IN ('value_a' and 'z' AND column_b IN ('value_a')
liquibase.exception.CommandExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.IllegalStateException: Duplicate key 'value_c')) OR (column_a (attempted merging values 'y' AND column_b IN ('value_a' and 'z' AND column_b IN ('value_a')
at liquibase.command.CommandScope.execute(CommandScope.java:258)
at liquibase.integration.commandline.CommandRunner.call(CommandRunner.java:51)
at liquibase.integration.commandline.CommandRunner.call(CommandRunner.java:21)
at picocli.CommandLine.executeUserObject(CommandLine.java:2045)
at picocli.CommandLine.access$1500(CommandLine.java:148)
at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2465)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2457)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2419)
at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2277)
at picocli.CommandLine$RunLast.execute(CommandLine.java:2421)
at picocli.CommandLine.execute(CommandLine.java:2174)
at liquibase.integration.commandline.LiquibaseCommandLine.lambda$execute$2(LiquibaseCommandLine.java:404)
at liquibase.Scope.child(Scope.java:200)
at liquibase.Scope.child(Scope.java:176)
at liquibase.integration.commandline.LiquibaseCommandLine.lambda$execute$3(LiquibaseCommandLine.java:379)
at liquibase.Scope.child(Scope.java:200)
at liquibase.Scope.child(Scope.java:176)
at liquibase.integration.commandline.LiquibaseCommandLine.execute(LiquibaseCommandLine.java:376)
at liquibase.integration.commandline.LiquibaseCommandLine.main(LiquibaseCommandLine.java:97)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
at liquibase.integration.commandline.LiquibaseLauncher.main(LiquibaseLauncher.java:116)
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.IllegalStateException: Duplicate key 'value_c')) OR (column_a (attempted merging values 'y' AND column_b IN ('value_a' and 'z' AND column_b IN ('value_a')
at liquibase.diff.output.changelog.DiffToChangeLog.print(DiffToChangeLog.java:235)
at liquibase.diff.output.changelog.DiffToChangeLog.print(DiffToChangeLog.java:125)
at liquibase.command.core.GenerateChangelogCommandStep.run(GenerateChangelogCommandStep.java:155)
at liquibase.command.CommandScope.execute(CommandScope.java:220)
... 23 more
Caused by: java.lang.RuntimeException: java.lang.IllegalStateException: Duplicate key 'value_c')) OR (column_a (attempted merging values 'y' AND column_b IN ('value_a' and 'z' AND column_b IN ('value_a')
at liquibase.diff.output.changelog.DiffToChangeLog$1.run(DiffToChangeLog.java:218)
at liquibase.Scope.lambda$child$0(Scope.java:191)
at liquibase.Scope.child(Scope.java:200)
at liquibase.Scope.child(Scope.java:190)
at liquibase.Scope.child(Scope.java:169)
at liquibase.diff.output.changelog.DiffToChangeLog.print(DiffToChangeLog.java:171)
... 26 more
Caused by: java.lang.IllegalStateException: Duplicate key 'value_c')) OR (column_a (attempted merging values 'y' AND column_b IN ('value_a' and 'z' AND column_b IN ('value_a')
at java.base/java.util.stream.Collectors.duplicateKeyException(Collectors.java:135)
at java.base/java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1(Collectors.java:182)
at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at liquibase.ext.databricks.diff.output.changelog.ChangedTblPropertiesUtil.convertToMapExcludingDeltaParameters(ChangedTblPropertiesUtil.java:116)
at liquibase.ext.databricks.diff.output.changelog.ChangedTblPropertiesUtil.getFilteredTblProperties(ChangedTblPropertiesUtil.java:123)
at liquibase.ext.databricks.diff.output.changelog.MissingTableChangeGeneratorDatabricks.fixMissing(MissingTableChangeGeneratorDatabricks.java:36)
at liquibase.diff.output.changelog.ChangeGeneratorChain.fixMissing(ChangeGeneratorChain.java:44)
at liquibase.diff.output.changelog.ChangeGeneratorFactory.fixMissing(ChangeGeneratorFactory.java:94)
at liquibase.diff.output.changelog.DiffToChangeLog.generateChangeSets(DiffToChangeLog.java:334)
at liquibase.diff.output.changelog.DiffToChangeLog.printNew(DiffToChangeLog.java:258)
at liquibase.diff.output.changelog.DiffToChangeLog$1.run(DiffToChangeLog.java:177)
... 31 more
make: *** [liquibase-generate-changelog] Error 1
System:
- Liquibase Databricks extension 1.4.2
- Liquibase Open Source 4.33.0
- Databricks JDBC driver 2.7.4.1015
In a scenario where more complex check constraints are defined on a table, for example:
the generate changelog command throws following error, unable to finish the command successfully:
System: