我可以影响 h2 SCRPT 命令中的 dump/export 顺序吗

can I influence the dump/export order at the h2 SCRPT command

我有一个包含一些 table 和一个视图的 h2 架构。

视图定义为:

CREATE FORCE VIEW PUBLIC.VIEW_TEST(NAME_,STREET_) AS 
SELECT 
USER.NAME_,
ADDRESS.STREET_
FROM 
PUBLIC.USER 
LEFT OUTER JOIN PUBLIC.ADDRESS ON USER.ADDRESS_= ADDRESS.ID_

转储后(通过“SCRIPT TO ...”),在转储文件中,“CREATE FORCE VIEW PUBLIC.VIEW_TEST ...”位于“CREATE TABLE ADDRESS ...”子句之前。此 table 已加入视图。

结果是,在恢复模式(通过“RUNSCRIPT FROM ...”)后,命令“SELECT * FROM VIEW_TEST”returns 引用的 table“ADDRESS" 未知:

View "PUBLIC.VIEW_TEST" is invalid: "Tabelle ""ADDRESS"" not found 
Table ""ADDRESS"" not found [42102-197]"; SQL statement:
SELECT * FROM VIEW_TEST [90109-197] 90109/90109

如果我删除视图并重新创建它,一切正常,但我想自动化转储和恢复过程。

有没有办法设置 table 和视图的顺序?

确保视图定义位于转储末尾的最佳方法是什么?

非常感谢

不,没有这样的方法。

这是一个相关的错误报告: https://github.com/h2database/h2database/issues/2390

如果您使用持久数据库,您可以在执行 RUNSCRIPT 命令后关闭连接(确保您不使用 DB_CLOSE_DELAY 或使用 SHUTDOWN 命令)并且重新打开它。视图将在启动时正确初始化。

如果您使用内存数据库,唯一的解决方法是使用

重新编译您的视图
ALTER VIEW VIEW_TEST RECOMPILE;
ALTER VIEW otherView RECOMPILE;
.....