могу ли я повлиять на порядок выгрузки / экспорта командой SCRPT h2 - PullRequest
0 голосов
/ 28 января 2020

У меня есть схема 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

Если я отбрасываю представление и воссоздаю его, все работает нормально, но я хочу автоматизировать процесс выгрузки и восстановления.

Есть ли способ установить порядок таблиц и представлений?

Каков наилучший способ убедиться, что определения представлений находятся в конце дампа?

Большое спасибо

1 Ответ

0 голосов
/ 28 января 2020

Нет, такого способа нет.

Вот соответствующий отчет об ошибке: https://github.com/h2database/h2database/issues/2390

Если вы используете постоянную базу данных, вы можете закрыть соединение после Выполнение команды RUNSCRIPT (убедитесь, что вы не используете DB_CLOSE_DELAY или команду SHUTDOWN) и снова откройте ее. Представления будут правильно инициализированы при запуске.

Если вы используете базу данных в памяти, единственный обходной путь - это перекомпилировать ваши представления с помощью

ALTER VIEW VIEW_TEST RECOMPILE;
ALTER VIEW otherView RECOMPILE;
.....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...