2

在使用 Liquibase 时,有什么方法可以利用现有数据生成一些要插入的数据?

例如,假设我想更新 id 为 5 的行,但我事先不知道 id 是否为 5,因为它链接到另一个表,我实际上将从该表中获取 id。有什么方法可以告诉 Liquibase 从 SELECT 查询中获取 id 吗?

我猜这不太可能,因为我觉得 Liquibase 真的是为一种非常结构化的非动态方法而设计的,但问一下也无妨。

谢谢。

4

2 回答 2

5

您不能使用内置更改来根据现有数据插入数据,但可以将标签与带有嵌套选择的插入语句一起使用。

例如:

<changeSet>
  <sql>insert into person (name, manager_id) values ('Fred', (select id from person where name='Ted'))</sql>
</changeSet>

注意:SQL(以及对插入+选择的支持)取决于数据库供应商。

于 2012-04-04T05:39:58.890 回答
2

可以编写自己的自定义重构类来生成 SQL。该功能旨在支持基于变更集的参数生成静态 SQL。

所以.. 获得与数据库的连接是可行的,但是这种方法附带的健康警告是生成的 SQL 是动态的(您的数据可能会更改)并且与您的数据库实例紧密相关。

这将导致的一个问题示例是无法为 DBA 生成 SQL 升级脚本以针对生产数据库运行。

我一直在考虑这个用例一段时间。我仍然不知道 liquibase 是否是解决这个数据管理问题的最佳解决方案,或者它是否需要与dbunit等附加工具结合使用。

于 2012-03-28T21:11:53.447 回答