H2更改约束名称的问题

问题描述 投票:1回答:1

我正在尝试将迁移设置为在集成测试中使用,但Flyway未按预期工作。

这是一个SQL文件的修改示例,用于显示我正在做的事情:

第一版:

CREATE TABLE Foobar (
  property1 VARCHAR(999) NOT NULL,
  property2 VARCHAR(999),
  property3 VARCHAR(999),
  id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY,

  CONSTRAINT Foobar_pk PRIMARY KEY (id)
);

... CREATED OTHER TABLES

第二版:

ALTER TABLE Foobar ADD uuid CHAR(36);
ALTER TABLE Foobar DROP CONSTRAINT Foobar_pk;
ALTER TABLE Foobar DROP COLUMN id;
ALTER TABLE Foobar ADD CONSTRAINT Foobar_pk PRIMARY KEY (uuid)

...

第三版:

--CREATED ANOTHER TABLE

这就是我正在做的迁移H2:

  private final String JDBC_H2_CONNECTION_STRING = "jdbc:h2:mem:FooBarDB;MODE=PostgreSQL;DB_CLOSE_DELAY=-1";

  /**
   * Creates the schema of the test database.
   * 
   * @throws SQLException If a SQL error occur.
   */
  @Before
  public void createSchema() throws SQLException {
    final Flyway flyway = new Flyway();

    flyway.setDataSource(JDBC_H2_CONNECTION_STRING, "", "");
    flyway.setInstalledBy(System.getProperty("user.name"));
    flyway.migrate();
  }

  /**
   * Deletes the schema of the test database for posterior use.
   * 
   * @throws SQLException If a SQL error occur.
   */
  @After
  public void deleteSchema() throws SQLException {
    final Flyway flyway = new Flyway();

    flyway.setDataSource(JDBC_H2_CONNECTION_STRING, "", "");
    flyway.clean();
  }

我得到的错误是:

org.flywaydb.core.internal.command.DbMigrate$FlywayMigrateException: SQL State  : 90057
Error Code : 90057
Message    : Constraint "Foobar_PK" not found; SQL statement:
ALTER TABLE Foobar DROP CONSTRAINT Foobar_pk; ALTER TABLE Foobar DROP COLUMN id [90057-197]

它起初似乎是一个SQL问题,但奇怪的是,当使用Maven插件直接使用PostgreSQL的生产数据库时,迁移完全发生,并且它给了我这个H2的错误。所以我不知道它是H2的问题,还是Flyway的问题(​​因为集成测试使用Java版本),或者如果我在这个特殊情况下缺少一些我应该做的事情。


在H2上直接测试SQL并查看目录后,我看到了这个特定约束的奇怪之处。

它被命名为Foobar_pk,而不是在CONSTRAINT Foobar_pk PRIMARY KEY (id)中明确指定为CONSTRAINT_F。所以我不认为这是Flyway的问题,而且只是H2。

有没有人对此有所了解?谢谢大家!

h2 flyway
1个回答
1
投票

这实际上是H2上的一个错误,它基于H2的开发者之一Katzyn,当创建自动增量类型的列时,它已经具有默认名称的主键的隐式约束。为此创建了一个新的提交,并且关闭了issue,所以我希望在下一个版本中修复它。

谢谢大家!

© www.soinside.com 2019 - 2024. All rights reserved.