2014-03-12 31 views
0

我有一个使用Liquibase设置的PostgreSQL数据库。当我使用maven运行liquibase:dropAll时,它会让我放下一切,但触发函数。有没有一种方式,该maven的目标也触发功能被删除?liquibase:dropAll也应该删除触发函数

因为当我在dropAll后重新应用变更集时,它无法创建已有的函数。

回答

1

不幸的是, dropAll的实现方式是使用liquibase快照函数查找要删除的所有对象,除了未由快照查找的对象类型外,其中的工作正常。 Snapshot可处理表,列,视图和序列等标准类型,但不会引入更多数据库特定类型,如触发器,函数,过程,用户定义类型等。由于快照不知道触发器,因此dropAll无法知道要删除它们。

如果您正在使用PostgreSQL,最简单的方法可能是只运行

drop schema public cascade; 
create schema public; 

如“Drop all tables in PostgreSQL?”描述,而不是使用liqubase dropAll。

+0

或者你知道一种方式来执行一些额外的SQL,比如你在liquibase上发布的一个额外的SQL:dropAll? – Tarion

+0

没有内置的方式,但是上面的SQL将取代dropAll所做的任何事情。 –

+0

Liquibase确实有一个丰富的扩展系统,允许您添加对快照的支持,然后删除触发器。我在http://stackoverflow.com/questions/22172239/how-to-extend-liquibase-to-generate-change-logs-with-stored-procedures-function的答案描述了如何为存储过程做到这一点,但触发器会类似 –