我有一个项目,我使用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版本没有同步,但我无法使其正常工作。如果有人有想法,请与我和社区分享。
答案 0 :(得分:0)
如果您阅读了CREATE INDEX的PostgreSQL文档,您将找到以下声明:
名称
要创建的索引的名称。不能包含模式名称 这里;索引始终在与其父级相同的模式中创建 表。如果省略名称,PostgreSQL会选择合适的名称 基于父表的名称和索引的列名称。
因此,索引名称中不能包含模式名称。