我是否可以通过h2 SCRPT命令影响转储/导出顺序

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

我有一个带有一些表和视图的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 ...”子句之前。该表已在视图内联接。

结果是,通过“ RUNSCRIPT FROM ...”还原架构后,命令“ SELECT * FROM VIEW_TEST”返回错误,表明所引用的表“ 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

如果我放下视图并重新创建它,一切都很好,但是我想使转储和还原过程自动化。

是否可以设置表和视图的顺序?

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

非常感谢

view backup h2 restore
1个回答
0
投票
以下是相关的错误报告:https://github.com/h2database/h2database/issues/2390

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

如果使用内存数据库,唯一的解决方法是使用以下方法重新编译视图:>

ALTER VIEW VIEW_TEST RECOMPILE; ALTER VIEW otherView RECOMPILE; .....

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