2014-08-29 13 views
12

Found non-empty schema "public" without metadata table! Use init() or set initOnMigrate to true to initialize the metadata table. Flyway: niepusty bez schematu tabeli metadanych

  • Używam PostgreSQL 9.2 z PostGIS 2.0. Oznacza to, że domyślnie, gdy utworzę nową bazę danych, pojawi się tabela utworzona w schemacie public o nazwie spatial_ref_sys.

Po uruchomieniu flyway migrate w tej bazie danych pojawia się powyższy błąd. Wydaje się, że uruchomienie init powoduje utworzenie tabeli public.schema_version i oznaczenie wersji 1 jako SUCCEDED bez faktycznego uruchamiania pliku migracji. Próbowałem także kombinacji initOnMigrate bez powodzenia. Flyway nie jest skonfigurowany do zarządzania dowolnymi schematami.

Jakieś pomysły na temat tego, w jaki sposób mogę przeprowadzić migrację w tym scenariuszu?

+0

Zmieniłem jeszcze tytuł pytania, aby po prostu podać komunikat o błędzie. Oryginalny tytuł "Migracja dziewiczej bazy danych powoduje błędy" był po prostu niepoprawny, jak podano w komentarzach poniżej. – markdsievers

Odpowiedz

14

Tytuł jest nieco sprzeczny, ponieważ baza danych rzeczywiście nie jest dziewicą, ponieważ zainstalowano, poprzez rozszerzenie PostGIS, wiele obiektów w publicznym schemacie.

Można albo

  • ustawić flyway.schemas do nowego schematu, powiedzmy my_app, który zostanie utworzony automatycznie przez Flyway. Twoja aplikacja powinna wtedy użyć tego zamiast publicznego (zalecane)
  • ustawić flyway.baselineOnMigrate na true lub wywołać flyway.baseline() w stosunku do publicznego schematu. Będzie to działać, ale publiczność będzie wtedy zawierać mieszankę obu swoich obiektów aplikacyjnych oraz PostGIS obiektów
+0

Punkt targowy, zmieniono tytuł i treść, aby odzwierciedlić zastrzeżenie. Jeszcze raz dziękuję za odpowiedzi, Axel, uderzy ponownie w poniedziałek i wróci z moimi wynikami. – markdsievers

+0

Na marginesie, jeśli masz jakieś uwagi na temat [tego pytania dotyczącego integracji Flyway/EJB] (http://stackoverflow.com/questions/25557898/bootstrap-ejb3-application-before-jpa-hibernate-startup), Uwielbiam słuchać twoich komentarzy. – markdsievers

+0

Co zrobiłem, dodano 'flyway' do' flyway.schemas', więc 'schema_version' jest całkowicie izolowany. Mamy obecnie ~ 7 schematów, więc w [odniesienie do twojej odpowiedzi na moje poprzednie pytanie] (http://stackoverflow.com/questions/25374196/flyway-why-are-schemas-not-created-when-setinitonmigrate- jest ustawiony) Idę z podejściem "nic". Przy tej konfiguracji działa migrowanie bazy danych z pierwotnymi * danymi. W istniejącej bazie danych 'init -initVersion = 2' będzie działać zgodnie z oczekiwaniami, ale' migrate -initOnMigrate = true -initVersion = 2' spróbuje uruchomić wszystkie migracje. Wydaje się to sprzeczne z dokumentacją. – markdsievers

-5

W pom.xml dodać tę linię wewnątrz Build-> Wtyczki prawda

0

Jeśli używasz Gradle można uruchamiać

./gradlew -Dflyway.schemas=public flywayClean flywayMigrate 

Gdzie publiczna jest nazwa bazy danych zawierającej tabelę schema_versions. To powinno usunąć tabelę i metadane, a także uruchomić migracje, aby uzyskać aktualny stan.

Powiązane problemy