错误"CREATE SEQUENCE" 行 h2 脚本命令



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

Sequence "SYSTEM_SEQUENCE_6DBC2231_8C34_46B3_9CB9_2BC9E42CECA2" already exists

似乎"SCRIPT"命令正在为数据库中的每个系统序列生成一个"创建序列"行。不仅对于选择进行备份的表的序列,而且对于所有表的所有序列。因此,在还原时,备份脚本会尝试为未触及的表创建序列并失败。答案是肯定的。

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

这个问题也在GitHub上被问到: #2094. 这是我对其他读者在上述问题中的一些评论的副本:

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

它根据设计从所有架构或仅从指定的架构导出所有序列。

  1. 可以使用SCRIPT命令的DROP子句。通过此子句,附加的DROP TABLE命令将包含在此类脚本中。DROP TABLE命令还会删除自动生成的生成列序列。

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

  3. 您可以关闭所有连接,删除数据库,创建一个新数据库并执行其中的RUNSCRIPT

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

从数据库创建 SQL 脚本。

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

CREATE SEQUENCE IF NOT EXISTS

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

最新更新