【问题标题】:liquibase:dropAll should also delete trigger functionsliquibase:dropAll 也应该删除触发函数
【发布时间】:2014-03-12 21:41:56
【问题描述】:

我有一个使用 Liquibase 设置的 PostgreSQL 数据库。当我使用 maven 运行 liquibase:dropAll 时,除了触发函数之外,它会丢弃我所有的东西。有没有一种方法可以让 maven 目标也删除 triggerfunctions?

自从我在 dropAll 之后重新应用我的变更集时,它无法创建已经存在的函数。

【问题讨论】:

    标签: postgresql maven liquibase


    【解决方案1】:

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

    如果您使用的是 postgresql,最简单的方法可能是运行

    drop schema public cascade;
    create schema public;
    

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

    【讨论】:

    • 或者你知道一种方法来执行一些额外的 SQL,就像你在 liquibase:dropAll 上发布的那样?
    • 没有内置方法,但上面的 SQL 将取代 dropAll 所做的。
    • Liquibase 确实有一个丰富的扩展系统,可以让您添加对快照的支持,然后删除触发器。我在stackoverflow.com/questions/22172239/… 中的回答描述了如何为存储过程执行此操作,但触发器会类似
    • 另一个选项是drop owned by ... cascade,它将删除特定用户拥有的所有数据库对象。我通常使用它,尤其是在涉及多个模式时
    猜你喜欢
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多