我正在尝试连接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程序来更正此问题,这并非易事。
答案 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>