Liquibase尝试使用不正确的数据类型将数据插入列

时间:2018-10-04 17:35:27

标签: liquibase snowflake-datawarehouse snowflake snowflake-schema

我正在尝试连接liquibase与Snowflake一起使用。我得到它来构建和启动。它创建DatabaseChangeLog和DatabaseChangeLogLock表。但是,当尝试将数据插入DatabaseChangeLog表时,出现以下错误:

WARNING 10/4/18 5:13 PM: liquibase: Unknown database: Snowflake
Unexpected error running Liquibase: SQL compilation error:
Expression type does not match column data type, expecting TIMESTAMP_NTZ(9) but got TIMESTAMP_LTZ(9) for column DATEEXECUTED

我找到了将DATETIME转换为TIMESTAMP_NTZ的代码,但这没有意义,因为Snowflake现在已经添加了DATETIME数据类型。如果Liquibase试图将元数据加载到该表中,我应该如何将其加载到该表中?

我愿意接受所有建议,但我不是Java程序员,因此如果必须创建Java程序来更正此问题,这并非易事。

2 个答案:

答案 0 :(得分:0)

不幸的是,具有Java开发经验的人将需要对Liquibase或Liquibase扩展进行更改,以支持雪花DBMS。

答案 1 :(得分:0)

直到在Snowflake / liquibase方面有此问题的修复之前,我通过引入应该是liquibase执行的第一个更改集的变通集来解决此问题:

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">

    <changeSet id="1" author="user">
        <comment>Fix liquibase type mismatch</comment>
        <sql>
            <!--Due to snowflake and liquibase datetime type mismatch-->
            ALTER TABLE "DATABASECHANGELOG" DROP COLUMN "DATEEXECUTED";
            ALTER TABLE "DATABASECHANGELOG" ADD COLUMN "DATEEXECUTED" TIMESTAMP_LTZ;
        </sql>
        <rollback>
        </rollback>
    </changeSet>
</databaseChangeLog>