【问题标题】:Liquibase - Multi-line SQL rollback using rollbackSplitStatements and rollbackEndDelimiterLiquibase - 使用 rollbackSplitStatements 和 rollbackEndDelimiter 的多行 SQL 回滚
【发布时间】:2017-11-15 20:47:04
【问题描述】:

在 3.5.2 中引入了 rollbackSplitStatements 和 rollbackEndDelimiter,以允许我们在多行中编写回滚语句,而不必用“--rollback”标记每一行,或者至少我假设来自 PR (https://github.com/liquibase/liquibase/pull/334 )。

但是我没有看到任何关于如何使用它的文档。

举个例子:

--changeset auth:1.1 rollbackSplitStatements:false rollbackEndDelimiter:/
DELETE FROM my_table WHERE id = 3;
--rollback
insert into my_table values (
  3,
  'firstname',
  'lastname'
);
/

这会在迁移期间引发错误:
运行 Liquibase 时出现意外错误:错误:“/”处或附近的语法错误

或者,这不会引发错误,但会在迁移期间执行“--rollback”下的语句:

--changeset auth:1.1 
DELETE FROM my_table WHERE id = 3;
--rollback rollbackSplitStatements:false rollbackEndDelimiter:/
insert into my_table values (
  3,
  'firstname',
  'lastname'
);
/

【问题讨论】:

  • SQL 语句以; 终止,/ 没有意义。最后你有什么/
  • 如果将结束分隔符设置为\n/
  • 我尝试了不同的 rollbackEndDelimiters,但都没有奏效。我只使用了“/”,因为我在示例中看到过它。
  • @a_horse_with_no_name 请参阅docs中的 SQL 示例

标签: liquibase rollback


【解决方案1】:

我希望多行回滚能像您介绍的那样工作。我用的是3.5.3,还是得把@9​​87654321@放在每一行前面

--changeset auth:1.1 rollbackSplitStatements:false
DELETE FROM my_table WHERE id = 3;
--rollback insert into my_table values (
--rollback  3,
--rollback  'firstname',
--rollback  'lastname'
--rollback);

事实上,rollbackSplitStatements 设置似乎对我的测试没有任何影响。

【讨论】:

  • 是的,也许我只是误解了 rollbackSplitStatements 和 rollbackEndDelimiter 的用途。我找不到任何关于它们使用的文档。
猜你喜欢
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
相关资源
最近更新 更多