【问题标题】:Spring boot - h2 and Oracle no 100% compatibilitySpring boot - h2 和 Oracle 没有 100% 的兼容性
【发布时间】:2018-03-03 02:05:17
【问题描述】:

我在 Spring Boot 应用程序中使用 H2,在生产中使用 Oracle DB。 为了检查迁移文件,我使用 FlyWay。 不幸的是,H2 与 Oracle 不兼容(即使设置为 Oracle 模式)。 所以,我无法验证我的迁移文件。 当我有一个 H2 查询时 - 我的项目中的验证是可以的,但是当我将它上传到生产环境时 - 它不会在 Oracle 上工作。 您知道如何验证我的 h2-db 项目中的 oracle 迁移文件吗?

【问题讨论】:

  • 例如编辑列数据类型。在 h2 sql 上:ALTER TABLE table_name ALTER COLUMN column_name datatype; 和在 oracle 上:ALTER TABLE table_name MODIFY COLUMN column_name datatype;
  • 通过使用 Oracle。如果使用 ANSI SQL 规范中指定的内容之外的任何内容,则不同的数据库通常不兼容。
  • 我们目前正在努力解决 Oracle 模式下 Flyway 和 H2 的问题 - 注意 FLyway 6.0.2

标签: spring oracle spring-boot h2 flyway


【解决方案1】:

Flyway FAQ 在 db 特定 SQL 下涵盖了这一点:

您可以使用 flyway.locations 属性。它看起来像这样:

   TEST (Derby): flyway.locations=sql/common,sql/derby
   PROD (Oracle): flyway.locations=sql/common,sql/oracle

然后,您可以在特定于数据库的位置中拥有公共语句 (V1__Create_table.sql) 和特定于数据库的语句 (V2__Alter_table.sql) 的不同副本。

如果差异真的很小,即只有几个关键字,另一种方法是将不同的关键字作为 Flyway 占位符:

ALTER TABLE table_name ${alter_column} COLUMN column_name datatype;

TEST (H2):     flyway.placeholders.alter_column=ALTER
PROD (Oracle): flyway.placeholders.alter_column=MODIFY

【讨论】:

    猜你喜欢
    • 2013-12-11
    • 1970-01-01
    • 2018-10-19
    • 2019-05-01
    • 2023-04-08
    • 2017-07-28
    • 2021-06-05
    • 2020-09-03
    • 2019-06-10
    相关资源
    最近更新 更多