Liquibase loadData作为字符串而不是CLOB资源

时间:2018-07-22 22:27:47

标签: migration liquibase

问题

我最近将Liquibase从3.6.2升级到3.4.2

现在将CSV中的种子数据加载到文本字段中会导致CLOB资源错误。在此之前,只需将文本作为值插入即可。

设置

我正在使用Liquibase来管理数据迁移。

我有一个带有codedescription列的表。 description的类型为TEXT

  <changeSet author="" id="create-table-degrees">
    <createTable tableName="degrees">
      <column name="code"
        type="varchar(2)">
        <constraints primaryKey="true"/>
      </column>
      <column name="description"
        type="text">
        <constraints unique="true"/>
      </column>
    </createTable>
    <rollback>
      <dropTable tableName="degrees"/>
    </rollback>
  </changeSet>

我在CSV中有种子数据:

code,description
"D1","MASTERS"
"D2","DOCTORATE"

我使用loadData加载它:

  <changeSet author="" id="seed-degrees">
    <loadData file="seeds/degrees.csv"
      tableName="degrees" />
  </changeSet>

错误

Unexpected error running Liquibase: CLOB resource not found: MASTERS

问题

是否有一种方法可以防止Liquibase将种子值解释为文件路径而不是字符串,还是需要在loadData中手动将列类型定义为String

例如我想避免将旧的changeSet修改为:

  <changeSet author="" id="seed-degrees">
    <loadData file="seeds/degrees.csv"
      tableName="roles">
      <column name="description" type="string" />
    </loadData>
  </changeSet>

1 个答案:

答案 0 :(得分:2)

CORE-3287:Anver S 2018年12月3日,下午3:07中列出的解决方法

在添加原始定义的显式列类型定义的同时 stackoverflow发布

<column name="description" type="string" />

可以解决问题-对我来说,有效地要求已经进行了更新 应用了变更集,理想情况下我会尽量避免。