如何强制Liquibase不将模式名称放入索引名称?

时间:2018-02-28 09:20:43

标签: xml postgresql indexing syntax-error liquibase

我有一个项目,我使用PostgreSQL 9.5作为RDBMS和Liquibase 3.5.3来生成数据库实体。我想使用以下XML在表上创建索引:

    <createIndex indexName="idx_entity_audit_event_entity_id"
        tableName="jhi_entity_audit_event">
        <column name="entity_id" type="bigint"/>
    </createIndex>

生成的SQL命令如下:

    CREATE INDEX public.idx_entity_audit_event_entity_id ON
                                            public.jhi_entity_audit_event(entity_id)

执行Liquibase变更集时,出现以下错误:

      Reason: liquibase.exception.DatabaseException: ERROR: syntax error at or near "."
      Position: 20 [Failed SQL: CREATE INDEX public.idx_entity_audit_event_entity_id ON public.jhi_entity_audit_event(entity_id)]

我已经尝试在pgAdmin 4中手动执行上述脚本,并得到了同样的错误。我曾尝试再次手动重新创建索引,但我已从索引名称中跳过模式名称public并且它有效。 我不确定它是Liquibase还是Postgres问题,或者只是Liquibase和Postgres版本没有同步,但我无法使其正常工作。如果有人有想法,请与我和社区分享。

1 个答案:

答案 0 :(得分:0)

如果您阅读了CREATE INDEX的PostgreSQL文档,您将找到以下声明:

  

名称

     

要创建的索引的名称。不能包含模式名称   这里;索引始终在与其父级相同的模式中创建   表。如果省略名称,PostgreSQL会选择合适的名称   基于父表的名称和索引的列名称。

因此,索引名称中不能包含模式名称。