代码之家  ›  专栏  ›  技术社区  ›  black sensei

使用hsqldb(内存中)命名liquibase表时出错。需要解决方法

  •  0
  • black sensei  · 技术社区  · 15 年前

    我正在一个项目中使用liquibase,我只是意识到是什么导致了构建失败。我已经成功地使用命令行generatechangelog来对抗MySQL中的相同模式,并将该文件包含在我的主变更日志文件中。

    对于测试环境,我使用hsqldb。现在所有的表名都是用连字符与语言分开的。由于构建失败,我打开了mydb.script,所有用连字符分隔的表名都是大写的,但是语言看起来是这样的。

    CREATE MEMORY TABLE SOME_TABLE(ID BIGINT NOT NULL,OBJ_VESION INTEGER DEFAULT 0 NOT NULL,REQUESTER_PHONE VARCHAR(20),FORM_CODE VARCHAR(100),DATE_STARTED TIMESTAMP,DATE_ENDED TIMESTAMP,LAST_ACTIVITY TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,SOME_TABLE_STATUS VARCHAR(255),CONSTRAINT PK_INCOMING_MESSAGE_SESSION PRIMARY KEY(ID))  
    
    CREATE MEMORY TABLE "language"(ID BIGINT NOT NULL,CODE VARCHAR(10),NAME VARCHAR(50),DESCRIPTION VARCHAR(255),CONSTRAINT PK_LANGUAGE PRIMARY KEY(ID))
    

    在更改日志文件中,它们看起来像这样

    <changeSet author="highjo (generated)" id="1282409084036-10">
        <createTable tableName="some_table">
            <column name="id" type="BIGINT">
                <constraints nullable="false" primaryKey="true"/>
            </column>
            <column defaultValueNumeric="0" name="obj_vesion" type="INT">
                <constraints nullable="false"/>
            </column>
           <!-- ... -->
        </createTable>
    </changeSet>
    <changeSet author="highjo (generated)" id="1282409084036-11">
        <createTable tableName="language">
            <column name="id" type="BIGINT">
                <constraints nullable="false" primaryKey="true"/>
            </column>
            <column name="code" type="VARCHAR(10)"/>
            <!-- .... -->
        </createTable>
    </changeSet>
    

    正如你所注意到的,在change log文件中,它们都是小写的。我试过将change log语言更改为capital,在脚本中,它是capital,只是它仍然有双引号。:(

    如何解决这个问题?谢谢你的阅读。

    1 回复  |  直到 15 年前
        1
  •  0
  •   Nathan Voxland    15 年前

    我认为引用语言的原因是因为它是HSQL中的一个保留字,所以liquibase引用了它,这样SQL就不会失败。

    Liquibase 2.0的转义规则可能已经更改,但如果没有,您可以更容易地重写Q自定义数据库类中的转义对象方法,并查看它是否工作。

    不过,这些引用并不重要。它们不应该出现在表名本身中。