回答这个问题:Postgres table constraint using group-by, 我正在尝试将以下Postgres代码翻译成liquibase XML
create unique index idx_table on table(subcategory, base_unit)
where base_unit;
我试过了:
<createIndex indexName="idx_table"
tableName="table"
unique="true">
<columnNames="subcategory, base_unit"/>
<where>base_unit</where>
</createIndex>
但这给了我错误: 元素类型“columnNames”必须后跟属性规范“&gt;”或“/&gt;”。
更新
<createIndex indexName="idx_table"
tableName="table"
unique="true">
<column name="subcategory"/>
<column name="base_unit"/>
<where>base_unit</where>
</createIndex>
导致错误:
Invalid content was found starting with element 'where'. One of '{"liquibase.org/xml/ns/dbchangelog":column}' is expected.
答案 0 :(得分:1)
Liquibase目前不支持createIndex中的“where”部分。
您将需要使用modifySql:
<changeSet id="YOUR_ID" author="YOU">
<createIndex indexName="idx_table"
tableName="table"
unique="true">
<column name="subcategory"/>
<column name="base_unit"/>
</createIndex>
<modifySql>
<append value=" where base_unit"/>
</modifySql>
</changeSet>
或直接使用sql:
<changeSet id="YOUR_ID" author="YOU">
<sql>create unique index idx_table on table(subcategory, base_unit) where base_unit</sql>
</changeSet>
答案 1 :(得分:0)
我认为你的xml应该是这样的:
<createIndex indexName="idx_table"
tableName="table"
unique="true">
<column name="subcategory"/>
<column name="base_unit"/>
<where>base_unit</where>
</createIndex>