4

我正在尝试连接 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 程序来纠正这个问题,这将不是一件容易的事。

4

2 回答 2

1

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

于 2018-10-04T17:43:13.743 回答
0

Until there is a fix on Snowflake/liquibase side for this, I worked around this issue by introducing a change set that should be the first one executed by 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>
于 2019-12-10T03:46:19.707 回答