【发布时间】:2014-03-12 21:41:56
【问题描述】:
我有一个使用 Liquibase 设置的 PostgreSQL 数据库。当我使用 maven 运行 liquibase:dropAll 时,除了触发函数之外,它会丢弃我所有的东西。有没有一种方法可以让 maven 目标也删除 triggerfunctions?
自从我在 dropAll 之后重新应用我的变更集时,它无法创建已经存在的函数。
【问题讨论】:
标签: postgresql maven liquibase
我有一个使用 Liquibase 设置的 PostgreSQL 数据库。当我使用 maven 运行 liquibase:dropAll 时,除了触发函数之外,它会丢弃我所有的东西。有没有一种方法可以让 maven 目标也删除 triggerfunctions?
自从我在 dropAll 之后重新应用我的变更集时,它无法创建已经存在的函数。
【问题讨论】:
标签: postgresql maven liquibase
不幸的是,没有。 dropAll 的实现方式是它使用 liquibase 快照函数来查找要删除的所有对象,除了快照未查找的对象类型外,它工作正常。 Snapshot 处理标准类型,如表、列、视图和序列,但不涉及更多特定于数据库的类型,如触发器、函数、过程、用户定义类型等。由于快照不知道触发器,所以 dropAll 无法知道删除它们.
如果您使用的是 postgresql,最简单的方法可能是运行
drop schema public cascade;
create schema public;
如“Drop all tables in PostgreSQL?”中所述,而不是使用 liqubase dropAll。
【讨论】:
drop owned by ... cascade,它将删除特定用户拥有的所有数据库对象。我通常使用它,尤其是在涉及多个模式时