noscreenname
noscreenname

Reputation: 3370

UnexpectedLiquibaseException: Don't know how to find table and column names

While trying to execute a changeset that should add a column to a table :

<changeSet id="2013.06.25_2" author="ama">  
    <preConditions onFail="MARK_RAN">  
        <not>  
            <columnExists tableName="T_FORCED_DATA" columnName="TRADE_KEY_ID"/>  
        </not>  
</preConditions>  
    <comment>Add column T_FORCED_DATA.TRADE_KEY_ID</comment>  
    <addColumn tableName="T_FORCED_DATA">  
        <column name="TRADE_KEY_ID" type="numeric(10,0)" defaultValue="NULL">  
            <constraints nullable="true" references="T_TRADE_KEY" foreignKeyName="TRADE_KEY_ID" />  
        </column>  
    </addColumn>  
</changeSet>  

I get the following error :

SEVERE 6/25/13 5:35 PM:liquibase: Change Set db/changelog/_2013/_06/_05/update_T_FORCED_DATA.xml::2013.06.25_2::ama failed.  Error: Don't know how to find table and column names from T_TRADE_KEY liquibase.exception.UnexpectedLiquibaseException: Don't know how to find table and column names from T_TRADE_KEY  
    at liquibase.sqlgenerator.core.AddColumnGenerator.addForeignKeyStatements(AddColumnGenerator.java:93)  
    at liquibase.sqlgenerator.core.AddColumnGeneratorDefaultClauseBeforeNotNull.generateSql(AddColumnGeneratorDefaultClauseBeforeNotNull.java:91)  
    at liquibase.sqlgenerator.core.AddColumnGeneratorDefaultClauseBeforeNotNull.generateSql(AddColumnGeneratorDefaultClauseBeforeNotNull.java:26)  
    at liquibase.sqlgenerator.SqlGeneratorChain.generateSql(SqlGeneratorChain.java:30)  
    at liquibase.sqlgenerator.SqlGeneratorFactory.generateSql(SqlGeneratorFactory.java:150)  
    at liquibase.executor.AbstractExecutor.applyVisitors(AbstractExecutor.java:22)  
    at liquibase.executor.jvm.JdbcExecutor.access$000(JdbcExecutor.java:36)  
    at liquibase.executor.jvm.JdbcExecutor$1ExecuteStatementCallback.doInStatement(JdbcExecutor.java:82)  
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:55)  
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:104)  
    at liquibase.database.AbstractDatabase.execute(AbstractDatabase.java:1091)  
    at liquibase.database.AbstractDatabase.executeStatements(AbstractDatabase.java:1075)  
    at liquibase.changelog.ChangeSet.execute(ChangeSet.java:317)  
    at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:27)  
    at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:58)  
    at liquibase.Liquibase.update(Liquibase.java:114)  
    at org.liquibase.maven.plugins.LiquibaseUpdate.doUpdate(LiquibaseUpdate.java:31)  
    at org.liquibase.maven.plugins.AbstractLiquibaseUpdateMojo.performLiquibaseTask(AbstractLiquibaseUpdateMojo.java:24)  
    at org.liquibase.maven.plugins.AbstractLiquibaseMojo.execute(AbstractLiquibaseMojo.java:305)  
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)  
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)  
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)  
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)  
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)  
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)  
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)  
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)  
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)  
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)  
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)  
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)  
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)  
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)  
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
    at java.lang.reflect.Method.invoke(Method.java:601)  
    at   org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)  
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)  
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)  
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)  

Does anyone know why am I getting this exception ?
For info : I have a Table called T_TRADE_KEY with a column TRADE_KEY_ID.

Thanks

Upvotes: 2

Views: 3371

Answers (1)

Jens
Jens

Reputation: 6383

Looking at the liquibase code and according to the stack trace you provided liquibase is checking on the references="T_TRADE_KEY" with a regex of: ([\\w\\._]+)\\(([\\w_]+)\\). While this does not match, the error you get is thrown.

The regex expects something with brackets.

So I guess something like:

references="T_TRADE_KEY(TRADE_KEY_ID)"

should work.

The attribute foreignKeyName is not the column name of the foreign key but just a name for the foreign key.

Maybe the documentation on the <constraint> tag also helps.

Upvotes: 3

Related Questions