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的答案描述了如何为存储过程做到这一点,但触发器会类似 –