Liquibase H2创建序列失败的bigint。

问题描述 投票:0回答:1

使用 liquibase 3.8.9,运行以下变更集成功。

<changeSet author="quarkus" id="1-1">
        <createSequence cacheSize="1" cycle="false" incrementBy="1" maxValue="9223372036854775807" minValue="1" schemaName="myschema" sequenceName="mytable_id_seq" startValue="1"/>
</changeSet>

和添加数据类型bigint规范失败。

<changeSet author="quarkus" id="1-1">
    <createSequence cacheSize="1" cycle="false" dataType="bigint" incrementBy="1" maxValue="9223372036854775807" minValue="1" schemaName="myschema" sequenceName="mytable_id_seq" startValue="1"/>
</changeSet>

堆栈跟踪

ERROR: Failed to start application
java.lang.IllegalStateException: liquibase.exception.MigrationFailedException: Migration failed for change set db-test/changelog-0.xml::1-1::quarkus:
     Reason: liquibase.exception.DatabaseException: Syntax error in SQL statement "CREATE SEQUENCE MYSCHEMA.MYTABLE_ID_SEQ AS[*] BIGINT START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807"; SQL statement:
CREATE SEQUENCE myschema.mytable_id_seq AS bigint START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 [42000-200] [Failed SQL: (42000) CREATE SEQUENCE myschema.mytable_id_seq AS bigint START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807]

Bigint数据类型是否有限制?

谢谢

h2 liquibase
1个回答
0
投票

就像你的异常所说的那样,SQL语法出现了错误

[42000-200] [Failed SQL: (42000) 
CREATE SEQUENCE myschema.mytable_id_seq AS bigint START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807

我相信是由于保留了一个词 bigint. 也许是Liquibase创建SQL查询的机制有问题。我试着在我的本地环境中执行你的changeSet,得到了同样的错误。

所以我已经删除了 dataType="bigint" 从changeSet中取出,然后就成功了。

<changeSet author="quarkus" id="1-1">
    <createSequence cacheSize="1" cycle="false" incrementBy="1"
                    maxValue="9223372036854775807" minValue="1" schemaName="public"
                    sequenceName="mytable_id_seq" startValue="1"/>
</changeSet>

经过一些Liquibase源代码的调试,我找到了为这个changeSet生成的SQL查询。

CREATE SEQUENCE MYSCHEMA.MYTABLE_ID_SEQ 
START WITH 1 
INCREMENT BY 1 
MINVALUE 1 
MAXVALUE 9223372036854775807

正如@a_horse_withno_name在评论中提到的,dataType是: bigint 默认情况下。

© www.soinside.com 2019 - 2024. All rights reserved.