{"id":196,"date":"2016-03-20T10:22:24","date_gmt":"2016-03-20T09:22:24","guid":{"rendered":"http:\/\/blog.ulrich-schulte.net\/?p=196"},"modified":"2016-03-30T19:13:08","modified_gmt":"2016-03-30T18:13:08","slug":"repeatable-migrations-mit-flyway-4-0","status":"publish","type":"post","link":"https:\/\/ulrich-schulte.net\/?p=196","title":{"rendered":"Repeatable Migrations mit Flyway 4.0"},"content":{"rendered":"<p>Flyway ist ein Datenmigrations-Tool und stellt\u00a0mit der neuen Version 4.0 die &#8222;repeatable Migrations&#8220;, also wiederholbare Migrationen vor.<\/p>\n<p>Wiederholbare Migrationen sind z.B. Definitionen von Views, Prozeduren, Funktionen und Packages, die, auch wenn sie sich ver\u00e4ndern, nicht als Differenzskript, sondern als komplette Definition in die Datenbank eingespielt werden. Vor allem aber ist es so m\u00f6glich, unter Beibehaltung des Dateinamens mehrere Versionen der Datei mittels Flyway in die Datenbank einzuspielen.<\/p>\n<h1>Anwendungsbeispiel<\/h1>\n<p>im Schema hr liefert die view Managers eine Sicht auf alle Mitarbeiter, die als Manager t\u00e4tig sind.<\/p>\n<p>Diese View ist in der Datei R1__View_Manager.sql definiert.<\/p>\n<pre>create view manager as select id,name from employees<\/pre>\n<p>Nun wird die Tabelle employees um eine Spalte isManager erweitert. Das Skript dazu steht in V1.1__manager_add_isManager.sql<\/p>\n<pre>alter table employees add isManager char(1) default 'N';<\/pre>\n<p>Entsprechend muss sich die View-Definition \u00e4ndern. Diese \u00c4nderung erfolgt in der Datei R1__View_Manager.sql:<\/p>\n<pre>create or replace view Manager as select * from employees where isManager = 'Y'<\/pre>\n<p>Es ist dieselbe Datei wie die urspr\u00fcngliche Definition. Auf diese Weise lassen sich \u00c4nderungen an der Datei z.B. in GIT gut nachverfolgen und der Entwickler ist nicht mehr gezwungen eine weitere Datei mit der neuen Definition der View anzulegen. Das ist eine echte Verbesserung bei der Wartung und Entwicklung datenbankseitiger Logik.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Flyway ist ein Datenmigrations-Tool und stellt\u00a0mit der neuen Version 4.0 die &#8222;repeatable Migrations&#8220;, also wiederholbare Migrationen vor. Wiederholbare Migrationen sind z.B. Definitionen von Views, Prozeduren, Funktionen und Packages, die, auch wenn sie sich ver\u00e4ndern, nicht als Differenzskript, sondern als komplette Definition in die Datenbank eingespielt werden. Vor allem aber ist es so m\u00f6glich, unter Beibehaltung &hellip; <a href=\"https:\/\/ulrich-schulte.net\/?p=196\" class=\"more-link\"><span class=\"screen-reader-text\">Repeatable Migrations mit Flyway 4.0<\/span> weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[5],"tags":[18,19],"class_list":["post-196","post","type-post","status-publish","format-standard","hentry","category-oracle","tag-flyway","tag-repeatable-migration"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8NCNL-3a","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/ulrich-schulte.net\/index.php?rest_route=\/wp\/v2\/posts\/196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ulrich-schulte.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ulrich-schulte.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ulrich-schulte.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ulrich-schulte.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=196"}],"version-history":[{"count":2,"href":"https:\/\/ulrich-schulte.net\/index.php?rest_route=\/wp\/v2\/posts\/196\/revisions"}],"predecessor-version":[{"id":199,"href":"https:\/\/ulrich-schulte.net\/index.php?rest_route=\/wp\/v2\/posts\/196\/revisions\/199"}],"wp:attachment":[{"href":"https:\/\/ulrich-schulte.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ulrich-schulte.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ulrich-schulte.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}