2
我有一個變更集來創建索引。如何重新創建一個索引,如果它已經與liquibase存在
<changeSet author="hilland" id="x-NC-U-y" runOnChange="true">
<createIndex indexName="NC-U-y" tableName="x" unique="true">
<column name="y"/>
</createIndex>
<rollback>
<dropIndex .../>
</rollback>
<modifySql>
<append value=" INCLUDE ([a],[b]) WITH (DATA_COMPRESSION=page)"/>
</modifySql>
</changeSet>
的問題是,該指數威力的舊版本存在(它會在某些目標(dev的服務器,使用老版本的指數;沒有包括),不會對他人(如新鮮部署到一個空數據庫)。
有沒有解決這個使腳本變得普遍,而不是包含一個前綴它說
<sql>IF select {sys.indexes.stuff} is not null {drop the index}</sql>?
理想情況下,將滴的前提條件更好的辦法如果存在e xisting索引,以便它可以被重新創建,但我不認爲這是可以做到的。
處理這種情況的最佳方法是什麼?
我想到的另一種解決方案是將單獨的變化「如果索引v1存在,放下它」,然後有一個單獨的v2變更集,但那麼這將使回滾困難。
我意識到changeset的更改條件的運行會使回滾變得困難,但是在這種情況下,我唯一關心的回滾是從一個空數據庫開始並從一個空數據庫開始,儘管可輕鬆適應先前版本的回滾模式也歡迎。
2個問題在這裏; 1)如果沒有這個和已經部署的索引,我必須非常小心地從我當前的結構轉換到新的更新日誌,因爲簡單地添加這個更改集會導致它執行和刪除索引,而沒有後續的執行變更集以創建它再次執行。第二個問題,如果我想改變已經部署的索引,那麼這個變更集怎麼知道再次執行?我當前的自定義sql執行下降,如果,並且只有(如果索引存在,我即將創建它的新版本) –