看看这个
Jira ticket
Liquibase在数据库更新表中更改为不创建主键,因为它引入了密钥大小的问题,并不是真正必要的。我还没有检查并删除现有的主键。它应该被删除,但不会造成问题,除非您遇到一个边缘情况,其中您有非常长的id、作者和/或文件路径。
还描述了一种可能的解决方法:
一个简单的解决方法是使用not
PrimaryKeyExists前置条件和AddPrimaryKey更改。多一点
所涉及的解决方法可能是创建一个插件来覆盖
CreateDatabaseChangeLogTableGenerator和/或
实现优先级服务的StandardChangeLogHistoryService。
下面是一个简单的解决方法示例。我已经优化了
索引以减少SQL上的表扫描、排序和书签查找
服务器,但它可能同样适用于Oracle。我不是
真的很担心sql的最大密钥长度为900字节
超过服务器。
<?xml version="1.0" encoding="UTF-8" ?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
<property name="liquibaseCatalogName" value=""/>
<property name="liquibaseSchemaName" value="${database.liquibaseSchemaName}"/>
<property name="databaseChangeLogTableName" value="${database.databaseChangeLogTableName}"/>
<property name="liquibaseTablespaceName" value=""/>
<changeSet id="1" author="your-name">
<preConditions onFail="MARK_RAN">
<primaryKeyExists
catalogName="${liquibaseCatalogName}"
schemaName="${liquibaseSchemaName}"
tableName="${databaseChangeLogTableName}"
primaryKeyName="PK_${databaseChangeLogTableName}"/>
</preConditions>
<dropPrimaryKey
catalogName="${liquibaseCatalogName}"
schemaName="${liquibaseSchemaName}"
tableName="${databaseChangeLogTableName}"
constraintName="PK_${databaseChangeLogTableName}"/>
</changeSet>
<changeSet id="2" author="your-name">
<createIndex
catalogName="${liquibaseCatalogName}"
schemaName="${liquibaseSchemaName}"
tableName="${databaseChangeLogTableName}"
indexName="IX_${databaseChangeLogTableName}_DATEEXECUTED_ORDEREXECUTED"
tablespace="${liquibaseTablespaceName}"
clustered="true">
<column name="DATEEXECUTED"/>
<column name="ORDEREXECUTED"/>
</createIndex>
</changeSet>
<changeSet id="3" author="your-name">
<addPrimaryKey
catalogName="${liquibaseCatalogName}"
schemaName="${liquibaseSchemaName}"
tableName="${databaseChangeLogTableName}"
constraintName="PK_${databaseChangeLogTableName}"
tablespace="${liquibaseTablespaceName}"
clustered="false"
columnNames="ID,AUTHOR,FILENAME"/>
</changeSet>
</databaseChangeLog>