Liquibase和功能指数



如果您在使用Liquibase时尝试执行脚本以在H2(面向PostgreSQL的上下文(上创建函数索引,则会发生可疑错误。

脚本本身看起来是这样的:

<changeSet id="2" author="...">
<createIndex tableName="test_table" indexName="test_table_id_idx">
<column name="(date_trunc('day', create_date))"/>
</createIndex>
</changeSet>

错误消息:

Syntax error in SQL statement "CREATE INDEX TEST_TABLE_ID_IDX ON TEST_TABLE(([*]DATE_TRUNC('day', CREATE_DATE)))"; expected "identifier"; 
SQL statement: CREATE INDEX test_table_id_idx ON test_table((date_trunc('day', create_date))) [42001-200]

GitHub 上的PoC

老实说,我不知道剧本中出现了这样一个奇怪的补充(关于这个[*](。也许H2不知道你需要使用哪个领域,而是用维尔卡或类似的东西代替。

是的,我知道H2和真正的PostgreSQL实现中可能存在的冲突和差异(如果这样的话,在PostgreSQL脚本上执行正确(,但我想了解是什么导致了脚本的这种变化。

来自H2的错误消息中的

[*]标记发现语法错误的位置。H2不支持对表达式进行索引,只能对列进行索引。

H2支持计算列上的索引,因此可以使用函数添加计算列,对其进行索引,并在查询中使用此计算列而不是基列上的函数,在这种情况下可以使用此索引。但我认为,如果你的主要数据库系统是PostgreSQL,这不是你的意图。如果您只在某些测试中使用H2,那么从H2的变更集中删除创建此类不兼容索引是更合理的。

相关内容

  • 没有找到相关文章

最新更新