0
我有一個使用Liquibase設置的PostgreSQL數據庫。當我使用maven運行liquibase:dropAll
時,它會讓我放下一切,但觸發函數。有沒有一種方式,該maven的目標也觸發功能被刪除?liquibase:dropAll也應該刪除觸發函數
因爲當我在dropAll後重新應用變更集時,它無法創建已有的函數。
我有一個使用Liquibase設置的PostgreSQL數據庫。當我使用maven運行liquibase:dropAll
時,它會讓我放下一切,但觸發函數。有沒有一種方式,該maven的目標也觸發功能被刪除?liquibase:dropAll也應該刪除觸發函數
因爲當我在dropAll後重新應用變更集時,它無法創建已有的函數。
不幸的是, dropAll的實現方式是使用liquibase快照函數查找要刪除的所有對象,除了未由快照查找的對象類型外,其中的工作正常。 Snapshot可處理表,列,視圖和序列等標準類型,但不會引入更多數據庫特定類型,如觸發器,函數,過程,用戶定義類型等。由於快照不知道觸發器,因此dropAll無法知道要刪除它們。
如果您正在使用PostgreSQL,最簡單的方法可能是隻運行
drop schema public cascade;
create schema public;
如「Drop all tables in PostgreSQL?」描述,而不是使用liqubase dropAll。
或者你知道一種方式來執行一些額外的SQL,比如你在liquibase上發佈的一個額外的SQL:dropAll? – Tarion
沒有內置的方式,但是上面的SQL將取代dropAll所做的任何事情。 –
Liquibase確實有一個豐富的擴展系統,允許您添加對快照的支持,然後刪除觸發器。我在http://stackoverflow.com/questions/22172239/how-to-extend-liquibase-to-generate-change-logs-with-stored-procedures-function的答案描述瞭如何爲存儲過程做到這一點,但觸發器會類似 –