Есть ли способ запустить задачу Flyway, исключая некоторые таблицы?

В настоящее время я использую Flyway для управления миграциями в приложении, использующем Postgis (геопространственное расширение PostgreSQL).

Этот плагин использует таблицу с именем spatial_ref_sys, которая находится в той же схеме, что и приложение. если я изменю владельца на пользователя базы данных моего приложения, то ошибка изменится на:

ОШИБКА: невозможно удалить таблицу space_ref_sys, поскольку этого требует расширение postgis

[ОШИБКА] Подсказка: вместо этого вы можете удалить расширение postgis.

Однако я не хочу отбрасывать эти элементы, которые являются внешними по отношению к логике моего приложения, поскольку они просто вспомогательные.

Я видел два вопроса, в которых Аксель Фонтейн сказал, что функция игнорирования некоторых таблиц не поддерживается (обоим вопросам два или более года), я даже клонировал репозиторий GitHub, чтобы добавить эту функцию в Flyway самостоятельно, и я читал некоторые части кода, где это изменение могло быть реализовано; но я подозреваю, что это повлияет на несколько частей кода, и мое незнание об этом может усложнить ситуацию.

Итак, я ищу помощь для реализации изменения или, может быть, некоторые идеи для решения этой проблемы.

Я думаю просто сделать DROP всей базы данных и воссоздать ее, затем воссоздать геопространственные расширения (Postgis, PGRouting и т. д.) и выполнить миграцию с помощью Flyway, но это будет не очень удобно, если мне придется делать это несколько раз. раз в процессе разработки..


person Alvaro    schedule 09.10.2017    source источник
comment
У меня тоже есть эта проблема. Есть ли таблица черного списка или что-то в этом роде?   -  person Saeed Zarinfam    schedule 24.06.2018


Ответы (1)


У меня была эта проблема для тестовой среды, и я хотел удалить схему по пролету. Я исправил это, манипулируя последовательностью bean-компонентов flyway. Сначала я удалил расширение postgis перед flyway.clean(), а затем в первой строке V1__init.sql добавил CREATE EXTENSION postgis SCHEMA public;:

@Bean
@Profile("test")
public Flyway flyway(DataSource dataSource) {
    Flyway flyway = new Flyway();
    flyway.setDataSource(dataSource);
    flyway.setLocations("classpath:db/migration");

    runSql("drop extension IF EXISTS postgis CASCADE;", dataSource);

    flyway.clean();
    flyway.migrate();

    return flyway;
}
person Saeed Zarinfam    schedule 26.06.2018