2014-08-29 5 views
12

Found non-empty schema "public" without metadata table! Use init() or set initOnMigrate to true to initialize the metadata table. Flyway: Nicht-leer-Schema ohne Metadatentabelle

  • ich Postgres 9.2 mit Postgis 2.0 verwenden. Das bedeutet, dass beim Erstellen einer neuen Datenbank standardmäßig eine Tabelle erstellt wird, die im public Schema namens spatial_ref_sys erstellt wird.

Wenn ich flyway migrate auf dieser Datenbank ausführen, erhalte ich den obigen Fehler. Das Ausführen von init scheint die public.schema_version Tabelle zu erstellen und Version 1 als SUCCEDED zu markieren, ohne die Migrationsdatei tatsächlich auszuführen. Ich habe auch Kombinationen von initOnMigrate mit keinem Erfolg versucht. Flyway ist nicht zum Verwalten von Schemas konfiguriert.

Irgendwelche Ideen, wie ich in diesem Szenario eine Migration ausführen kann?

+0

Ich habe den Titel der Frage noch weiter geändert, um einfach die Fehlermeldung anzugeben. Der ursprüngliche Titel "Eine neue Datenbank migrieren verursacht Fehler" war einfach falsch, wie in den Kommentaren unten angegeben. – markdsievers

Antwort

14

Der Titel ist etwas widersprüchlich, da die Datenbank tatsächlich nicht neu ist, da Sie über die PostGIS-Erweiterung eine Reihe von Objekten im öffentlichen Schema installiert haben.

Sie können entweder

  • gesetzt flyway.schemas auf ein neues Schema, sagen my_app, die dann automatisch von Flyway erstellt werden. Ihre Anwendung sollte dann diese anstelle der öffentlichen (empfohlen)
  • flyway.baselineOnMigrate bis true verwenden oder flyway.baseline() gegen das öffentliche Schema aufrufen. Dies funktioniert, aber öffentlich wird dann eine Mischung aus beidem Ihre Anwendungsobjekte enthalten und die PostGIS-Objekte
+0

Der Punkt wurde geändert, der Titel und der Inhalt wurden geändert, um dem Vorbehalt Rechnung zu tragen. Danke für die Antworten nochmal Axel, werde es am Montag nochmal treffen und komme mit meinen Ergebnissen zurück. – markdsievers

+0

Nebenbei, wenn Sie irgendwelche Kommentare zu [dieser Flyway/EJB-Integrationsfrage] (http://stackoverflow.com/questions/25557898/bootstrap-ejb3-application-before-jpa-hibernate-startup) haben, würde ich Liebe, irgendeinen deiner Kommentare zu hören. – markdsievers

+0

Was ich getan habe, ist 'flyway' zu' flyway.schemas' hinzugefügt, so dass 'schema_version' vollständig isoliert ist. Wir haben ~ 7 Schemas im Moment, also in [Verweis auf deine Antwort auf meine vorherige Frage] (http://stackoverflow.com/questions/25374196/flyway-why-are-schemas-not-created-when-settinitonmigrate- is-set) Ich gehe mit dem "Nichts" -Ansatz. Mit diesem Setup funktioniert die Migration einer neuen * Datenbank. Auf einer existierenden Datenbank wird 'init -initVersion = 2' jedoch wie gewünscht funktionieren, aber' migrate -initOnMigrate = true -initVersion = 2' wird versuchen, alle Migrationen auszuführen. Dies scheint der Dokumentation zu widersprechen. – markdsievers

-5

In pom.xml diese Zeile hinzufügen in Ihrem Build-> Plugins wahr

0

Wenn Sie Gradle verwenden Sie können ausführen

./gradlew -Dflyway.schemas=public flywayClean flywayMigrate 

Dabei ist öffentlich der Name der Datenbank, die die Tabelle schema_versions enthält. Das sollte die Tabelle und die Metadaten löschen sowie die Migrationen ausführen, um sie auf den neuesten Stand zu bringen.

Verwandte Themen