flyway:即使SQL语句失败也会强制迁移

rob*_*trv 1 migration oracle flyway

我已经为工作中的应用程序创建了一个flyway项目.事实证明,其中一个开发人员已经在TEST上执行了一些SQL语句,然后我才准备好飞路设置进行测试.

我的sql脚本有几个语句:

ALTER TABLE "TABLE1" MODIFY ("NAME" VARCHAR2(75 CHAR));
ALTER TABLE "TABLE2" DROP ("BOARD_ID");
ALTER TABLE "TABLE3" ADD CONSTRAINT "SYS_C0022270" CHECK ("ID" IS NOT NULL) ENABLE;
Run Code Online (Sandbox Code Playgroud)

应该在语句#2上删除的列已经在我们的TEST实例上手动删除.它还没有被我们的PROD实例删除,我想通过迁移而不是手动来实现.

显然,我没有在PROD上运行迁移而没有先在TEST上尝试(比这三个查询要多得多).

但是,由于我遇到问题的迁移是第一个在线,它无法继续.

有没有办法强迫它通过?我知道该列已被删除.我可以再次创建它,然后让迁移删除它.但是我可能还有其他可能失败的查询(创建可能已存在的种子数据等).我不希望停止我们的部署.

除了从PROD再次克隆我们的数据库并让开发团队在准备一组新的迁移时停止开发之外的任何想法?

DCo*_*kie 5

您可以使用异常处理程序将要忽略的任何SQL语句放入PL/SQL块中:

BEGIN 
  EXECUTE IMMEDIATE 'ALTER TABLE "TABLE1" MODIFY ("NAME" VARCHAR2(75 CHAR))';
EXCEPTION
  WHEN OTHERS THEN
    -- perhaps print a message about the command failure here
END;
/
Run Code Online (Sandbox Code Playgroud)

DDL必须在PL/SQL中的execute immediate语句内完成.

有点痛苦,但它应该工作.