我可以影响 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;
.....
我有一个包含一些 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;
.....