错误的 "CREATE SEQUENCE" 行 h2 SCRIPT 命令

False "CREATE SEQUENCE" lines of h2 SCRIPT command

在我的 java 应用程序中,我使用 SCRIPT 命令备份某些表。当我尝试将这个生成的备份脚本恢复到现有数据库中时,出现错误

Sequence "SYSTEM_SEQUENCE_6DBC2231_8C34_46B3_9CB9_2BC9E42CECA2" already exists

似乎 "SCRIPT" 命令正在为数据库中的每个系统序列生成一个 "CREATE SEQUENCE" 行。不仅针对选择备份的表的序列,而且针对所有表的所有序列。因此,在还原时,备份脚本会尝试为未触及的表创建序列,但失败了。当然可以。

这是 SCRIPT 命令中的错误还是我遗漏了什么?

我不这么认为这是 SCRIPT 命令中的错误,正如它所说...

Creates a SQL script from the database.

因此,当您第一次创建序列时,请确保它不会创建序列,如果它存在如下所示。

CREATE SEQUENCE IF NOT EXISTS

然后 SCRIPT 命令应该在备份脚本时复制相同的内容。

GitHub 上也有人问过这个问题: #2094。 这是我对上述问题的一些评论的副本,供其他读者使用:

SCRIPT 不是备份命令,它是数据/元数据导出命令。但是,您可以将其用于备份目的。但是你需要一个新的空数据库来加载这样的脚本。

它从所有模式中导出所有序列,或者仅从设计中指定的模式中导出。

  1. 您可以使用 SCRIPT 命令的 DROP 子句。使用此子句,额外的 DROP TABLE 命令将包含在此类脚本中。 DROP TABLE 命令还会删除自动创建的生成列序列。

  2. 可以在RUNSCRIPT命令之前执行DROP ALL OBJECTS命令。

  3. 可以关闭所有连接,删除数据库,新建一个并在里面执行RUNSCRIPT