2014-01-09 24 views
0

如何刪除所有DB對象使用liquibase我今天來翻過命令DropAll,只落數據庫中的所有表,我已經探討了谷歌,但仍strugling,取得Liquibase DropAll DBobjects

so i have drop the queue tables by running plsql with liquibase 
then I have use the command dropAll to drop all the tables and sequences. 

是否有另一種解決方案可以做到這一點,否則我將繼續使用

+0

您是否檢查了liquibase提供的回滾功能?例如,看到這個[問題](http://stackoverflow.com/questions/11131978/how-to-tag-a-changeset-in-liquibase-to-rollback)。 我主要是使用mysql,當我想清除數據庫時,我只需要執行一個'drop schema xyz',然後'create schema xyz'來擺脫一切。再次運行liquibase將從頭開始重新創建所有內容。 – Jens

+0

@Jens我通過databasechangelog xml和我從這個文件調用的文件中維護了回滾指令,但是每當我在databasechangeLog文件中運行目標「回滾」時,它將只回滾表中的不是隊列中的隊列架構和我的數據庫是甲骨文。 – Tenacious

+0

我還沒有真正使用過回滾功能 - 但我想知道隊列是如何創建的?不應該也有這樣的變化嗎?我想你有時需要爲回滾標籤添加額外的代碼來清理所有內容。表將由liquibase回滾,而不需要額外的工作,但其他的東西可能需要額外的sql,你需要添加到創建隊列的變更集中。 – Jens

回答

1

dropAll命令不會讀取更改日誌並執行回滾,它將快照數據庫並刪除它看到的所有內容。不幸的是,它不知道如何快照和刪除隊列,因此它們不會被丟棄。

根據數據庫的不同,您可以直接調用「drop database X; create database X」將其清除,而不使用dropAll。

您可以編寫一個擴展來將隊列支持構建到Liquibase(liquibase.org/extensions)中。您需要創建新類來實現用於添加支持的AbstractDatabaseObject,JdbcSnapshotGenerator和UnexpectedObjectChangeGenerator。