0

我想在数据库已经存在且其中包含生产数据的情况下使用 flyway 进行数据库更新。我现在正在研究的问题(我还没有找到一个好的解决方案),如下所示:

  1. 有一个带有数字 ID 的现有数据库表,例如

    创建表对象( obj_id 编号,...)

  2. 有一个序列“obj_seq”来分配新的obj_ids

  3. 在我的数据库迁移期间,我需要引入一些新对象,因此我需要新的对象 ID。但是我在开发时不知道这些将是什么 ID 号

  4. 有一个数据库触发器稍后会引用这些 ID。为了提高性能,我想避免在每次触发器运行时确定实际 ID,而是将 ID 直接放入触发器中

我想到的示例(非常简化):

  1. 插入对象 (obj_id, ...) 值 (obj_seq.nextval, ...)
  2. 从对偶中选择 obj_seq.currval

    -> 将其存储在变量“newID”中

  3. 当 new.id = newID 时在 some_other_table 上创建触发器 ...

现在,是否可以动态确定/使用这些变量?我已经看到了 flyway 占位符,但我的理解是我不能像上面的示例那样动态设置它们。

我可以使用基于 Java 的迁移脚本并做任何我喜欢的字符串魔术 - 所以,这将是一种方法,但也许有一种更优雅的使用 SQL 的方法?

很多谢谢!

tge

4

1 回答 1

0

如果您要更新的表仅包含参考数据,请去掉序列并手动分配 ID。

如果它包含参考和用户数据的混合,您需要根据其他列中的值选择 id。

于 2013-06-25T12:12:56.077 回答