使用 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数据类型是否有限制?
谢谢
就像你的异常所说的那样,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
默认情况下。