6
我正嘗試在liquibase中執行以下changeSet
,它應該創建一個索引。如果指數不存在,它應該默默地失敗:Liquibase changeSet with failOnError =「false」總是會跑?
<changeSet failOnError="false" author="sys" id="1">
<createIndex unique="true" indexName="key1" tableName="Table1">
<column name="name" />
</createIndex>
</changeSet>
到目前爲止,這麼好。問題是,這個changeSet
沒有登錄到DATABASECHANGELOG表中,因此每次運行liquibase時都會執行它。根據液體文獻和例如來自Nathen Voxland的this answer我認爲變更集應該標記爲在DATABASECHANGELOG表中運行。相反,它根本沒有記錄,正如我之前說過的,每次liquibase運行時(每次都會失敗)。
我錯過了什麼?
(我使用MySQL作爲數據庫管理系統)
我完全和你在一起,使用前提條件在我看來也是正確的做法。畢竟,這就是我對「changeSet」所做的事情(雖然uniqueConstraintExists前提條件已經丟失,但這是另一個事實)。我只是偶然發現了我對'failOnError =「false」'屬性的期望,我問自己是否描述的行爲是一個錯誤或一個特性;) – ebi
不幸的是,Oracle非空的先決條件對我不起作用,因爲檢查liquibase不支持不可空列。 –
我發佈此代表[dev-null](https://stackoverflow.com/users/1436741/dev-null)發佈此評論作爲答案; _這與前面的回答中的st_jeff的評論有關(但我沒有50的評論聲望): failOnError的另一個用例:如果在oracle中刪除一個唯一約束,那麼相關索引只會被刪除它比約束更新。因此,在刪除約束之後,刪除索引語句可能會導致錯誤,具體取決於索引的年齡._ – Bugs