错误的 "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
不是备份命令,它是数据/元数据导出命令。但是,您可以将其用于备份目的。但是你需要一个新的空数据库来加载这样的脚本。
它从所有模式中导出所有序列,或者仅从设计中指定的模式中导出。
您可以使用 SCRIPT
命令的 DROP
子句。使用此子句,额外的 DROP TABLE
命令将包含在此类脚本中。 DROP TABLE
命令还会删除自动创建的生成列序列。
可以在RUNSCRIPT
命令之前执行DROP ALL OBJECTS
命令。
可以关闭所有连接,删除数据库,新建一个并在里面执行RUNSCRIPT
在我的 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
不是备份命令,它是数据/元数据导出命令。但是,您可以将其用于备份目的。但是你需要一个新的空数据库来加载这样的脚本。
它从所有模式中导出所有序列,或者仅从设计中指定的模式中导出。
您可以使用
SCRIPT
命令的DROP
子句。使用此子句,额外的DROP TABLE
命令将包含在此类脚本中。DROP TABLE
命令还会删除自动创建的生成列序列。可以在
RUNSCRIPT
命令之前执行DROP ALL OBJECTS
命令。可以关闭所有连接,删除数据库,新建一个并在里面执行
RUNSCRIPT