{"id":70973,"date":"2020-02-23T00:58:26","date_gmt":"2020-02-22T21:58:26","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kak-ne-vystrelit-sebe-v-nogu-ispolzuya-liquibase"},"modified":"2020-03-03T16:14:41","modified_gmt":"2020-03-03T13:14:41","slug":"kak-ne-vystrelit-sebe-v-nogu-ispolzuya-liquibase","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-ne-vystrelit-sebe-v-nogu-ispolzuya-liquibase","title":{"rendered":"Hogyan l\u0151j\u00f6n mag\u00e1nak a l\u00e1b\u00e1ba Liquibase haszn\u00e1lat\u00e1val","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Soha nem volt, \u00e9s \u00edme, \u00fajra itt van!<\/p>\n<p><\/p>\n<p>Egy \u00fajabb projekt sor\u00e1n \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy a Liquibase-t a kezdetekt\u0151l fogva haszn\u00e1ljuk, hogy elker\u00fclj\u00fck a j\u00f6v\u0151beli probl\u00e9m\u00e1kat. Kider\u00fclt, hogy nem minden fiatal csapattag tudja helyesen haszn\u00e1lni. Bels\u0151 workshopot tartottam, amelyb\u0151l \u00fagy d\u00f6nt\u00f6ttem, hogy cikket \u00edrok. <\/p>\n<p><\/p>\n<p>A cikk hasznos tan\u00e1csokat \u00e9s h\u00e1rom \u00e1ltal\u00e1nos csapd\u00e1t tartalmaz, amelyekbe bele lehet esni, amikor rel\u00e1ci\u00f3s adatb\u00e1zis-migr\u00e1l\u00f3 eszk\u00f6z\u00f6kkel dolgozunk, k\u00fcl\u00f6n\u00f6sen a Liquibase-szel. A cikk Junior \u00e9s Middle szint\u0171 Java fejleszt\u0151knek sz\u00f3l, a tapasztaltabb fejleszt\u0151k sz\u00e1m\u00e1ra pedig hasznos lehet a megl\u00e9v\u0151 ismeretek strukt\u00far\u00e1z\u00e1sa \u00e9s megism\u00e9tl\u00e9se szempontj\u00e1b\u00f3l. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hogyan l\u0151j\u00f6n mag\u00e1nak a l\u00e1b\u00e1ba Liquibase haszn\u00e1lat\u00e1val\" src=\"\/wp-content\/uploads\/2020\/02\/f8b3c9a456bde7aa123702fae132b4b8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>A Liquibase \u00e9s a Flyway a k\u00e9t f\u0151 versenyt\u00e1rs technol\u00f3gia a rel\u00e1ci\u00f3s strukt\u00far\u00e1k verzi\u00f3kezel\u00e9s\u00e9nek megold\u00e1s\u00e1ra a Java vil\u00e1g\u00e1ban. Az els\u0151 teljesen ingyenes, \u00e9s a gyakorlatban gyakrabban v\u00e1lasztj\u00e1k, ez\u00e9rt a Liquibase lett a publik\u00e1ci\u00f3 h\u0151se. Mindazon\u00e1ltal n\u00e9h\u00e1ny le\u00edrt gyakorlat univerz\u00e1lis lehet, f\u00fcgg\u0151en az alkalmaz\u00e1s architekt\u00far\u00e1j\u00e1t\u00f3l. <\/p>\n<p><\/p>\n<p>A rel\u00e1ci\u00f3s strukt\u00far\u00e1k migr\u00e1ci\u00f3ja egy k\u00e9nyszer\u0171en kialakult m\u00f3dszer a rel\u00e1ci\u00f3s adatb\u00e1zisok gyenge rugalmass\u00e1g\u00e1val szembeni k\u00fczdelemre. Az objektum-orient\u00e1lt programoz\u00e1s divatj\u00e1nak idej\u00e9n a DB-vel val\u00f3 munka azt felt\u00e9telezte, hogy egyszer le\u00edrjuk a s\u00e9m\u00e1t, \u00e9s azut\u00e1n nem ny\u00falunk hozz\u00e1. De a val\u00f3s\u00e1g mindig olyan, hogy minden v\u00e1ltozik, \u00e9s a t\u00e1bl\u00e1k szerkezet\u00e9ben gyakran sz\u00fcks\u00e9g van m\u00f3dos\u00edt\u00e1sokra. Nyilv\u00e1nval\u00f3, hogy maga a folyamat n\u00e9ha f\u00e1jdalmas \u00e9s kellemetlen. <\/p>\n<p><\/p>\n<p>Nem szeretn\u00e9m m\u00e9lyebbre \u00e1sni a technol\u00f3gia \u00e9s a k\u00f6nyvt\u00e1r projektbe val\u00f3 beilleszt\u00e9s\u00e9nek utas\u00edt\u00e1sait; err\u0151l a t\u00e9m\u00e1r\u00f3l m\u00e1r el\u00e9g cikket \u00edrtak:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/460377\/\">A Liquibase haszn\u00e1lata az adatb\u00e1zis strukt\u00far\u00e1j\u00e1nak kezel\u00e9s\u00e9re Spring Boot alkalmaz\u00e1sban. 1. r\u00e9sz<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/460907\/\">A Liquibase haszn\u00e1lata az adatb\u00e1zis strukt\u00far\u00e1j\u00e1nak kezel\u00e9s\u00e9re Spring Boot alkalmaz\u00e1sban. 2. r\u00e9sz<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/436994\/\">Liquibase \u00e9s Maven<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/330662\/\">Az adatb\u00e1zis v\u00e1ltoz\u00e1sainak verzi\u00f3z\u00e1s\u00e1hoz haszn\u00e1lt megk\u00f6zel\u00edt\u00e9sek<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/271719\/\">A Spring MVC\/Security, REST, Hibernate, Liquibase futtat\u00e1sa k\u00e9t sorban<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Ezenk\u00edv\u00fcl m\u00e1r volt egy nagyszer\u0171 cikk hasznos tan\u00e1csokr\u00f3l:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/179425\/\">A Liquibase haszn\u00e1lata probl\u00e9m\u00e1k n\u00e9lk\u00fcl. 10 tan\u00e1cs a val\u00f3di fejleszt\u00e9s tapasztalat\u00e1b\u00f3l<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"sovety\">Tan\u00e1csok<\/h2>\n<p><\/p>\n<p>Szeretn\u00e9m megosztani a tan\u00e1csaimat \u00e9s megjegyz\u00e9seimet, amelyek az adatmigr\u00e1ci\u00f3val kapcsolatos probl\u00e9m\u00e1k k\u00fczdelmei sor\u00e1n sz\u00fclettek.<\/p>\n<p><\/p>\n<h3 id=\"1--pered-rabotoy-sleduet-oznakomitsya-s-razdelom-luchshih-praktik-na-saytehttpswwwliquibaseorgbestpracticeshtml-liquibase\">1. Munka el\u0151tt \u00e9rdemes \u00e1tn\u00e9zni a legjobb gyakorlatok szakasz\u00e1t a <noindex><a rel=\"nofollow\" href=\"https:\/\/www.liquibase.org\/bestpractices.html\">weboldalon<\/a><\/noindex> Liquibase<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.liquibase.org\/bestpractices.html\">itt<\/a><\/noindex> Egyszer\u0171, de nagyon fontos dolgokat \u00edrtak le, amelyek n\u00e9lk\u00fcl a k\u00f6nyvt\u00e1r haszn\u00e1lata megnehez\u00edtheti az \u00e9let\u00e9t. P\u00e9ld\u00e1ul a v\u00e1ltoz\u00e1skezel\u00e9s struktur\u00e1latlan megk\u00f6zel\u00edt\u00e9se el\u0151bb-ut\u00f3bb z\u0171rzavarhoz \u00e9s t\u00f6r\u00f6tt migr\u00e1ci\u00f3khoz vezet. Ha az egym\u00e1st\u00f3l f\u00fcgg\u0151 adatb\u00e1zis-szerkezeti \u00e9s szolg\u00e1ltat\u00e1si logikai v\u00e1ltoz\u00e1sokat nem egyszerre alkalmazz\u00e1k, akkor nagy a val\u00f3sz\u00edn\u0171s\u00e9ge, hogy piros teszteket vagy hib\u00e1s k\u00f6rnyezetet eredm\u00e9nyez. Ezenk\u00edv\u00fcl a Liquibase hivatalos weboldal\u00e1n tal\u00e1lhat\u00f3 haszn\u00e1lati aj\u00e1nl\u00e1sok k\u00f6z\u00f6tt szerepel a visszag\u00f6rget\u0151 szkriptek fejleszt\u00e9s\u00e9nek \u00e9s ellen\u0151rz\u00e9s\u00e9nek k\u00e9rd\u00e9se is a migr\u00e1ci\u00f3s szkriptek mellett. Na meg a cikkben <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/178665\/\">https:\/\/habr.com\/ru\/post\/178665\/<\/a><\/noindex> tal\u00e1lhat\u00f3k k\u00f3dp\u00e9ld\u00e1k, amelyek a migr\u00e1ci\u00f3kra \u00e9s a visszag\u00f6rget\u00e9si mechanizmusra vonatkoznak. <\/p>\n<p><\/p>\n<h3 id=\"2-esli-nachali-ispolzovat-sredstva-migracii--ne-dopuskayte-manualnyh-ispravleniy-v-strukture-bazy\">2. Ha elkezdte haszn\u00e1lni a migr\u00e1l\u00f3 eszk\u00f6z\u00f6ket \u2013 ne v\u00e9gezzen manu\u00e1lis jav\u00edt\u00e1sokat az adatb\u00e1zis strukt\u00far\u00e1j\u00e1ban.<\/h3>\n<p><\/p>\n<p>Ahogy mondani szokt\u00e1k: \u201eEgyszer Persil \u2013 mindig Persil\u201d. Ha az alkalmaz\u00e1s\u00e1nak adatb\u00e1zisa Liquibase eszk\u00f6z\u00f6kkel kezdett el m\u0171k\u00f6dni, b\u00e1rmilyen k\u00e9zi v\u00e1ltoztat\u00e1s azonnali inkonzisztens \u00e1llapotot eredm\u00e9nyez, \u00e9s a v\u00e1ltoz\u00e1skezel\u00e9s ir\u00e1nti bizalmi szint null\u00e1ra cs\u00f6kken. A lehets\u00e9ges kock\u00e1zatok k\u00f6z\u00e9 tartozik, hogy t\u00f6bb \u00f3r\u00e1t pazarol el az adatb\u00e1zis helyre\u00e1ll\u00edt\u00e1s\u00e1ra, a legrosszabb esetben pedig a szerver le\u00e1ll\u00edt\u00e1sa. Ha a csapat\u00e1ban van egy r\u00e9gi v\u00e1g\u00e1s\u00fa DBA architect, t\u00fcrelmesen \u00e9s megfontoltan magyar\u00e1zza el neki, hogy milyen rosszul v\u00e9gz\u0151dik, ha egyszer\u0171en saj\u00e1t bel\u00e1t\u00e1sa szerint szerkeszti az adatb\u00e1zist egy felt\u00e9teles SQL Developerb\u0151l. <\/p>\n<p><\/p>\n<h3 id=\"3-esli-chendzhset-uzhe-byl-zapushen-v-repozitoriy-izbegayte-redaktirovaniya\">3. Ha a v\u00e1ltoz\u00e1skezel\u00e9st m\u00e1r felt\u00f6lt\u00f6tt\u00e9k a rep\u00f3ba, ker\u00fclje a szerkeszt\u00e9st.<\/h3>\n<p><\/p>\n<p>Ha egy m\u00e1sik fejleszt\u0151 pull-olt \u00e9s alkalmazta azt a v\u00e1ltoz\u00e1skezel\u00e9st, amelyet k\u00e9s\u0151bb szerkesztenek, - biztosan kedves szavakkal fog megeml\u00e9kezni \u00d6nr\u0151l, amikor hib\u00e1t kap az alkalmaz\u00e1s ind\u00edt\u00e1sakor. Ha a v\u00e1ltoz\u00e1skezel\u00e9s szerkeszt\u00e9se valahogyan bejut a fejleszt\u0151i k\u00f6rnyezetbe - cs\u00fasz\u00f3s \u00faton kell majd j\u00e1rnia a hotfixekkel. A probl\u00e9ma l\u00e9nyege a v\u00e1ltoz\u00e1sok \u00e9rv\u00e9nyes\u00edt\u00e9se a hash-\u00f6sszeg alapj\u00e1n - a Liquibase alapvet\u0151 mechanizmusa. A v\u00e1ltoz\u00e1skezel\u00e9s k\u00f3dj\u00e1nak szerkeszt\u00e9se megv\u00e1ltoztatja a hash-\u00f6sszeget. A v\u00e1ltoz\u00e1skezel\u00e9sek szerkeszt\u00e9se csak abban az esetben lehets\u00e9ges, ha van lehet\u0151s\u00e9g az adatb\u00e1zis teljes \u00fajratelep\u00edt\u00e9s\u00e9re adatvesztes\u00e9g n\u00e9lk\u00fcl. Ebben az esetben a SQL vagy XML k\u00f3d refaktor\u00e1l\u00e1sa \u00e9ppen ellenkez\u0151leg, megk\u00f6nny\u00edtheti az \u00e9letet, \u00e9s olvashat\u00f3bb\u00e1 teheti a migr\u00e1ci\u00f3kat. P\u00e9ld\u00e1ul, amikor az alkalmaz\u00e1s ind\u00edt\u00e1sakor az eredeti adatb\u00e1zis s\u00e9m\u00e1j\u00e1t a csapat bels\u0151leg egyeztette. <\/p>\n<p><\/p>\n<h3 id=\"4--imey-proverennye-bekapy-baz-dannyh-esli-eto-vozmozhno\">4. Legyenek megb\u00edzhat\u00f3 adatb\u00e1zis ment\u00e9sek, ha lehets\u00e9ges<\/h3>\n<p><\/p>\n<p>Itt, gondolom, minden vil\u00e1gos. Ha esetleg a migr\u00e1ci\u00f3 nem siker\u00fcl, mindent vissza lehet \u00e1ll\u00edtani. A Liquibase rendelkezik vissza\u00e1ll\u00edt\u00e1si eszk\u00f6zzel, de a vissza\u00e1ll\u00edt\u00f3 szkripteket is a fejleszt\u0151 \u00edrja, \u00e9s ezekben ugyan\u00fagy lehetnek probl\u00e9m\u00e1k, mint a f\u0151 v\u00e1ltoztat\u00e1si halmaz szkriptjeiben. Ez azt jelenti, hogy a ment\u00e9sekre val\u00f3 felk\u00e9sz\u00fcl\u00e9s hasznos b\u00e1rmilyen esetben. <\/p>\n<p><\/p>\n<h3 id=\"5-ispolzuy-proverennye-bekapy-baz-dannyh-v-razrabotke-esli-eto-vozmozhno\">5. Haszn\u00e1lj megb\u00edzhat\u00f3 adatb\u00e1zis ment\u00e9seket a fejleszt\u00e9s sor\u00e1n, ha lehets\u00e9ges<\/h3>\n<p><\/p>\n<p>Ha ez nem ellent\u00e9tes a szerz\u0151d\u00e9sekkel \u00e9s a mag\u00e1n\u00e9let v\u00e9delm\u00e9vel, az adatb\u00e1zisban nincsenek szem\u00e9lyes adatok, \u00e9s nem olyan nagy, mint k\u00e9t nap \u2013 a migr\u00e1ci\u00f3 alkalmaz\u00e1sa el\u0151tt ellen\u0151rizheted, hogy hogyan m\u0171k\u00f6dik a fejleszt\u0151i g\u00e9pen, \u00e9s kisz\u00e1m\u00edthatod a migr\u00e1ci\u00f3 sor\u00e1n a szinte 100%-os potenci\u00e1lis probl\u00e9m\u00e1kat. <\/p>\n<p><\/p>\n<h3 id=\"6-obschaysya-s-drugimi-razrabotchikami-v-komande\">6. Kommunik\u00e1lj a csapat t\u00f6bbi fejleszt\u0151j\u00e9vel<\/h3>\n<p><\/p>\n<p>A megfelel\u0151en megszervezett fejleszt\u00e9si folyamatban mindenki tudja, ki mivel foglalkozik. A val\u00f3s\u00e1gban azonban gyakran nem \u00edgy van, ez\u00e9rt ha a saj\u00e1t feladatod keretein bel\u00fcl adatb\u00e1zis-strukt\u00far\u00e1ban k\u00e9sz\u00fclsz v\u00e1ltoz\u00e1sokra, \u00e9rdemes t\u00e1j\u00e9koztatnod az eg\u00e9sz csapatot. Ha valaki p\u00e1rhuzamosan v\u00e9gez v\u00e1ltoztat\u00e1sokat \u2013 \u00e9rdemes k\u00f6r\u00fcltekint\u0151en megszervez\u0151dni. A koll\u00e9g\u00e1kkal a munka befejez\u00e9se ut\u00e1n is \u00e9rdemes kommunik\u00e1lni, nem csak a kezd\u00e9skor. Sok potenci\u00e1lis probl\u00e9ma a v\u00e1ltoztat\u00e1si halmazokkal kapcsolatban megoldhat\u00f3 a k\u00f3d ellen\u0151rz\u00e9s\u00e9n\u00e9l. <\/p>\n<p><\/p>\n<h3 id=\"7-dumay-chto-delaesh\">7. Gondolkodj, mit csin\u00e1lsz!<\/h3>\n<p><\/p>\n<p>\u00dagy t\u0171nhet, ez egy\u00e9rtelm\u0171 tan\u00e1cs, ami b\u00e1rmilyen helyzetre \u00e9rv\u00e9nyes. Azonban sok probl\u00e9m\u00e1t el lehetett volna ker\u00fclni, ha a fejleszt\u0151 \u00fajra \u00e1tgondolja, mit csin\u00e1l \u00e9s mire hat ez. A migr\u00e1ci\u00f3kkal val\u00f3 munka mindig extra figyelmet \u00e9s gondoss\u00e1got ig\u00e9nyel. <\/p>\n<p><\/p>\n<h2 id=\"lovushki\">Csapd\u00e1k<\/h2>\n<p><\/p>\n<p>N\u00e9zz\u00fck most meg a tipikus csapd\u00e1kat, amelyekbe beleeshet\u00fcnk, ha nem k\u00f6vetj\u00fck a fenti tan\u00e1csokat, \u00e9s egy\u00e1ltal\u00e1n, mit kellene tenni?<\/p>\n<p><\/p>\n<h3 id=\"situaciya-1-dva-razrabotchika-pytayutsya-odnovremenno-dobavlyat-novye-chendzhsety\">Helyzet 1. K\u00e9t fejleszt\u0151 pr\u00f3b\u00e1lja egyszerre hozz\u00e1adni az \u00faj v\u00e1ltoztat\u00e1si halmazokat<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hogyan l\u0151j\u00f6n mag\u00e1nak a l\u00e1b\u00e1ba Liquibase haszn\u00e1lat\u00e1val\" src=\"\/wp-content\/uploads\/2020\/02\/20706fc970510bc06634fa001a4c7ceb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVasja \u00e9s Petya 4-es verzi\u00f3j\u00fa v\u00e1ltoztat\u00e1si halmazt szeretn\u00e9nek l\u00e9trehozni, an\u00e9lk\u00fcl, hogy tudn\u00e1nak egym\u00e1sr\u00f3l. V\u00e1ltoztat\u00e1sokat hajtottak v\u00e9gre az adatb\u00e1zis strukt\u00far\u00e1j\u00e1ban, \u00e9s beny\u00fajtott\u00e1k a pull requestet, k\u00fcl\u00f6nb\u00f6z\u0151 v\u00e1ltoztat\u00e1si halmaz f\u00e1jlokkal. Ezut\u00e1n a k\u00f6vetkez\u0151 cselekv\u00e9si mechanizmus javasolt:<\/p>\n<p><\/p>\n<h4 id=\"kak-reshat\">Hogyan oldjuk meg<\/h4>\n<p><\/p>\n<ol>\n<li>Valamilyen m\u00f3don a koll\u00e9g\u00e1knak meg kell \u00e1llapodniuk, hogy milyen sorrendben kellene v\u00e9grehajtaniuk a v\u00e1ltoztat\u00e1si halmazokat, mondjuk Petya\u00e9 legyen az els\u0151. <\/li>\n<li>Valakinek hozz\u00e1 kell adnia valamit a m\u00e1sodikhoz, \u00e9s jel\u00f6lje meg Vasi v\u00e1ltozat\u00e1t 5-\u00f6s verzi\u00f3val. Ezt meg lehet tenni Cherry Pick vagy \u00f3vatos egyes\u00edt\u00e9ssel. <\/li>\n<li>A v\u00e1ltoztat\u00e1sok ut\u00e1n mindig ellen\u0151rizni kell az elv\u00e9gzett m\u0171veletek \u00e9rv\u00e9nyess\u00e9g\u00e9t.<br \/>\nVal\u00f3j\u00e1ban a Liquibase mechanizmusai lehet\u0151v\u00e9 teszik, hogy a t\u00e1rol\u00f3ban k\u00e9t 4-es verzi\u00f3j\u00fa v\u00e1ltoz\u00e1sjegyzet legyen, ez\u00e9rt mindent hagyhat \u00fagy, ahogy van. Teh\u00e1t egyszer\u0171en k\u00e9t 4-es verzi\u00f3v\u00e1ltoztat\u00e1s lesz k\u00fcl\u00f6nb\u00f6z\u0151 nevekkel. Ezzel a megk\u00f6zel\u00edt\u00e9ssel k\u00e9s\u0151bb nagyon neh\u00e9z lesz eligibiliz\u00e1lni az adatb\u00e1zis v\u00e1ltozatait. <\/li>\n<\/ol>\n<p><\/p>\n<p>Ezen k\u00edv\u00fcl a Liquibase, mint a hobbitok otthona, sok titkot rejt. Az egyik ilyen a validCheckSum kulcs, amely az 1.7-es verzi\u00f3val jelent meg, \u00e9s lehet\u0151v\u00e9 teszi, hogy megadja a v\u00e1laszthat\u00f3 hash-\u00e9rt\u00e9ket egy adott v\u00e1ltoz\u00e1sjegyzethez f\u00fcggetlen\u00fcl att\u00f3l, hogy mi van az adatb\u00e1zisban. Dokument\u00e1ci\u00f3 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.liquibase.org\/documentation\/changeset.html\">https:\/\/www.liquibase.org\/documentation\/changeset.html<\/a><\/noindex> \u201eSok sz\u00e1m\u00edt\u00f3g\u00e9pes program nem tudja helyesen megjelen\u00edteni a k\u00e9tnyelv\u0171 sz\u00f6veget. P\u00e9ld\u00e1ul a h\u00e9ber n\u00e9v \u201eSara\u201d a sin (\u05e9) (ami jobbr\u00f3l \u00e1ll), majd a resh (\u05e8) \u00e9s v\u00e9g\u00fcl a he (\u05d4) (ami balr\u00f3l kellene, hogy \u00e1lljon) karaktereib\u0151l \u00e1ll.\u201d<\/p>\n<p><\/p>\n<blockquote><p>Adjon meg egy ellen\u0151rz\u0151sz\u00e1mot, amely \u00e9rv\u00e9nyesnek sz\u00e1m\u00edt erre a v\u00e1ltoztat\u00e1scsoportra, f\u00fcggetlen\u00fcl att\u00f3l, hogy mi van t\u00e1rolva az adatb\u00e1zisban. Ezt els\u0151sorban akkor haszn\u00e1lja, amikor meg kell v\u00e1ltoztatnia egy v\u00e1ltoztat\u00e1scsoportot, \u00e9s nem szeretne hib\u00e1kat kapni olyan adatb\u00e1zisokon, amelyeken m\u00e1r lefutott (nem aj\u00e1nlott elj\u00e1r\u00e1s).<\/p><\/blockquote>\n<p>Igen, ez a proced\u00fara nem aj\u00e1nlott. De n\u00e9ha egy er\u0151s vil\u00e1gos m\u00e1gus s\u00f6t\u00e9t technik\u00e1kkal is rendelkezik. <\/p>\n<p><\/p>\n<h3 id=\"situaciya-2-migraciya-kotoraya-zavisit-ot-dannyh\">2. helyzet. Adatf\u00fcgg\u0151 migr\u00e1ci\u00f3.<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hogyan l\u0151j\u00f6n mag\u00e1nak a l\u00e1b\u00e1ba Liquibase haszn\u00e1lat\u00e1val\" src=\"\/wp-content\/uploads\/2020\/02\/31a6eebb55278c0631115bf16483c7b8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Felt\u00e9telezve, hogy nincs lehet\u0151s\u00e9ge biztons\u00e1gi ment\u00e9seket haszn\u00e1lni \u00e9l\u0151 szerverek adatb\u00e1zisaib\u00f3l. Petya l\u00e9trehozta a v\u00e1ltoz\u00e1sjegyzetet, helyben ellen\u0151rizte, \u00e9s teljes magabiztoss\u00e1ggal beny\u00fajtotta a pull requestet a fejleszt\u00e9shez. A projekt vezet\u0151je \u00f3vatosan megk\u00e9rdezte, hogy Petya ellen\u0151rizte-e, majd beolvasta. De a telep\u00edt\u00e9s a fejleszt\u0151i szerveren megbukott.<\/p>\n<p><\/p>\n<p>Val\u00f3j\u00e1ban ez lehets\u00e9ges, \u00e9s senki sincs biztos\u00edtva ellene. Ez akkor t\u00f6rt\u00e9nik, ha a t\u00e1bl\u00e1k strukt\u00far\u00e1j\u00e1nak m\u00f3dos\u00edt\u00e1sa valamilyen m\u00f3don \u00f6sszekapcsol\u00f3dik az adatb\u00e1zis konkr\u00e9t adataival. Nyilv\u00e1nval\u00f3, hogy ha Petya adatb\u00e1zisa csak tesztadatokkal van felt\u00f6ltve, akkor nem fogja lefedni az \u00f6sszes probl\u00e9m\u00e1s esetet. P\u00e9ld\u00e1ul, amikor egy t\u00e1bl\u00e1t t\u00f6r\u00f6lnek, kider\u00fcl, hogy l\u00e9teznek bejegyz\u00e9sek m\u00e1s t\u00e1bl\u00e1kban, amelyek a t\u00f6r\u00f6lt bejegyz\u00e9sekkel kapcsolatban \u00e1llnak a k\u00fcls\u0151 kulcson kereszt\u00fcl. Vagy amikor egy oszlop t\u00edpus\u00e1t megv\u00e1ltoztatj\u00e1k, kider\u00fcl, hogy az adatok 100%-a nem alak\u00edthat\u00f3 \u00e1t az \u00faj t\u00edpusra. <\/p>\n<p><\/p>\n<h4 id=\"kak-reshat-1\">Hogyan oldjuk meg<\/h4>\n<p><\/p>\n<ul>\n<li>Olyan speci\u00e1lis szkriptek \u00edr\u00e1sa, amelyeket egyszer alkalmaznak a migr\u00e1ci\u00f3val egy\u00fctt, \u00e9s az adatokat a megfelel\u0151 form\u00e1ba hozz\u00e1k. Ez egy \u00e1ltal\u00e1nos m\u00f3dszer a probl\u00e9ma megold\u00e1s\u00e1ra, amikor az adatokat \u00faj strukt\u00far\u00e1kba kell \u00e1thelyezni a migr\u00e1ci\u00f3k alkalmaz\u00e1sa ut\u00e1n, de hasonl\u00f3t lehet alkalmazni el\u0151zetesen is, bizonyos esetekben. Ez a megold\u00e1s term\u00e9szetesen nem mindig el\u00e9rhet\u0151, mivel az \u00e9l\u0151 szerverek adatainak szerkeszt\u00e9se vesz\u00e9lyes \u00e9s ak\u00e1r k\u00e1ros is lehet. <\/li>\n<li>Egy m\u00e1sik bonyolult megold\u00e1s az, hogy m\u00f3dos\u00edtsuk a megl\u00e9v\u0151 v\u00e1ltoztat\u00e1si halmazt. A neh\u00e9zs\u00e9g abban rejlik, hogy minden adatb\u00e1zist, ahol az m\u00e1r l\u00e9tez\u0151 form\u00e1j\u00e1ban alkalmazva lett, helyre kell \u00e1ll\u00edtani. Teljesen lehets\u00e9ges, hogy az eg\u00e9sz backend csapat k\u00e9nyszer\u00fclni fog arra, hogy helyben \u00fajra telep\u00edtse az adatb\u00e1zist null\u00e1r\u00f3l. <\/li>\n<li>A leguniverz\u00e1lisabb megold\u00e1s az adatprobl\u00e9ma \u00e1thelyez\u00e9se a fejleszt\u0151i k\u00f6rnyezetbe, a hasonl\u00f3 helyzet \u00fajb\u00f3li l\u00e9trehoz\u00e1s\u00e1val \u00e9s egy \u00faj v\u00e1ltoztat\u00e1si halmaz hozz\u00e1ad\u00e1s\u00e1val, amely lehet\u0151v\u00e9 teszi a probl\u00e9ma megker\u00fcl\u00e9s\u00e9t a megszakadt rendszerhez.<br \/>\n<img decoding=\"async\" alt=\"Hogyan l\u0151j\u00f6n mag\u00e1nak a l\u00e1b\u00e1ba Liquibase haszn\u00e1lat\u00e1val\" src=\"\/wp-content\/uploads\/2020\/02\/b5d28a940a7a35b6cd7a819a8e68f027.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<\/ul>\n<p><\/p>\n<p>\u00d6sszess\u00e9g\u00e9ben, min\u00e9l ink\u00e1bb hasonl\u00edt az adatb\u00e1zis a termel\u00e9si szerver adataira, ann\u00e1l kisebb a val\u00f3sz\u00edn\u0171s\u00e9ge, hogy a migr\u00e1ci\u00f3s probl\u00e9m\u00e1k messzire eljutnak. \u00c9s term\u00e9szetesen, miel\u0151tt a v\u00e1ltoztat\u00e1si halmazt a t\u00e1rol\u00f3ba k\u00fclden\u00e9nk, \u00e9rdemes t\u00f6bbsz\u00f6r is elgondolkodni rajta, hogy valamit t\u00f6nkretesz-e. <\/p>\n<p><\/p>\n<h3 id=\"situaciya-3-liquibase-nachinaet-primenyatsya-uzhe-posle-vyhoda-v-prodakshn\">3. helyzet. A Liquibase alkalmaz\u00e1sa m\u00e1r a termel\u00e9sbe l\u00e9p\u00e9s ut\u00e1n kezd\u0151dik.<\/h3>\n<p><\/p>\n<p>Tegy\u00fck fel, hogy a csapatvezet\u0151 megk\u00e9rte P\u00e9tert, hogy integr\u00e1lja a Liquibase-t a projektbe, de a projekt m\u00e1r a termel\u00e9sben van, \u00e9s van m\u00e1r egy l\u00e9tez\u0151 adatb\u00e1zisstrukt\u00fara.<\/p>\n<p><\/p>\n<p>\u00cdgy a probl\u00e9ma az, hogy az \u00faj szervereken vagy fejleszt\u0151i g\u00e9peken ezeknek a t\u00e1bl\u00e1knak az adatait null\u00e1r\u00f3l kell \u00fajra l\u00e9trehozni, m\u00edg a m\u00e1r megl\u00e9v\u0151 k\u00f6rnyezetnek konzisztens \u00e1llapotban kell maradnia, k\u00e9szen \u00e1llva az \u00faj v\u00e1ltoztat\u00e1si halmazok fogad\u00e1s\u00e1ra. <\/p>\n<p><\/p>\n<h4 id=\"kak-reshat-2\">Hogyan oldjuk meg<\/h4>\n<p><\/p>\n<p>Itt is t\u00f6bb megold\u00e1s l\u00e9tezik:<\/p>\n<p><\/p>\n<ul>\n<li>Az els\u0151 \u00e9s legnyilv\u00e1nval\u00f3bb az, hogy legyen egy k\u00fcl\u00f6n szkript, amelyet k\u00e9zzel kell alkalmazni az \u00faj k\u00f6rnyezet inicializ\u00e1l\u00e1sakor. <\/li>\n<li>A m\u00e1sodik \u2014 kev\u00e9sb\u00e9 nyilv\u00e1nval\u00f3, ha egy Liquibase migr\u00e1ci\u00f3 van egy m\u00e1sik Liquibase kontextusban, \u00e9s azt alkalmazzuk. A Liquibase kontextusr\u00f3l b\u0151vebben itt olvashat: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.liquibase.org\/documentation\/contexts.html\">https:\/\/www.liquibase.org\/documentation\/contexts.html<\/a><\/noindex>. \u00d6sszess\u00e9g\u00e9ben ez egy \u00e9rdekes mechanizmus, amely sikeresen alkalmazhat\u00f3 p\u00e9ld\u00e1ul tesztel\u00e9sre. <\/li>\n<li>A harmadik \u00fat t\u00f6bb l\u00e9p\u00e9st tartalmaz. El\u0151sz\u00f6r l\u00e9tre kell hozni a migr\u00e1ci\u00f3t a m\u00e1r megl\u00e9v\u0151 t\u00e1bl\u00e1khoz. Ezut\u00e1n ezt alkalmazni kell valamilyen k\u00f6rnyezetben, \u00edgy megkapjuk a hash-\u00e9rt\u00e9k\u00e9t. A k\u00f6vetkez\u0151 l\u00e9p\u00e9s, hogy a nem \u00fcres szerver\u00fcnk\u00f6n inicializ\u00e1ljuk az \u00fcres Liquibase t\u00e1bl\u00e1kat, \u00e9s a changsetek alkalmaz\u00e1si t\u00f6rt\u00e9net\u00e9be manu\u00e1lisan be kell helyezni egy bejegyz\u00e9st a \"mintha alkalmazva lett volna\" changsetr\u0151l a m\u00e1r megl\u00e9v\u0151 adatb\u00e1zisbeli v\u00e1ltoztat\u00e1sokkal. \u00cdgy a m\u00e1r l\u00e9tez\u0151 szerveren a t\u00f6rt\u00e9net sz\u00e1m\u00edt\u00e1sa a 2. verzi\u00f3val indul, m\u00edg minden \u00faj k\u00f6rnyezet azonos m\u00f3don fog viselkedni.<br \/>\n<img decoding=\"async\" alt=\"Hogyan l\u0151j\u00f6n mag\u00e1nak a l\u00e1b\u00e1ba Liquibase haszn\u00e1lat\u00e1val\" src=\"\/wp-content\/uploads\/2020\/02\/78881ee56a6ee3ba4e0cd1089598c3c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"situaciya-4-migracii-stanovyatsya-ogromnymi-i-ne-uspevayut-vypolnyatsya\">4. helyzet. A migr\u00e1ci\u00f3k hatalmasak lesznek \u00e9s nem tudj\u00e1k befejezni a v\u00e9grehajt\u00e1st.<\/h3>\n<p><\/p>\n<p>A szolg\u00e1ltat\u00e1s fejleszt\u00e9s\u00e9nek elej\u00e9n \u00e1ltal\u00e1ban a Liquibase k\u00fcls\u0151 f\u00fcgg\u0151s\u00e9gk\u00e9nt van haszn\u00e1lva, \u00e9s az \u00f6sszes migr\u00e1ci\u00f3t az alkalmaz\u00e1s ind\u00edt\u00e1sakor kezelik. Azonban id\u0151vel el\u0151fordulhatnak a k\u00f6vetkez\u0151 esetek:<\/p>\n<p><\/p>\n<ul>\n<li>A migr\u00e1ci\u00f3k hatalmasak lesznek \u00e9s hossz\u00fa ideig fognak tartani.<\/li>\n<li>Felmer\u00fcl a migr\u00e1ci\u00f3 sz\u00fcks\u00e9gess\u00e9ge elosztott k\u00f6rnyezetekben, mondjuk, egyszerre t\u00f6bb DB szerver p\u00e9ld\u00e1nyon.<br \/>\nEbben az esetben a migr\u00e1ci\u00f3k t\u00fal hossz\u00fa alkalmaz\u00e1sa ind\u00edt\u00e1si id\u0151t\u00fall\u00e9p\u00e9shez vezethet az alkalmaz\u00e1s ind\u00edt\u00e1sakor. Ezen k\u00edv\u00fcl a migr\u00e1ci\u00f3k alkalmaz\u00e1sa minden alkalmaz\u00e1s p\u00e9ld\u00e1nyra k\u00fcl\u00f6n-k\u00fcl\u00f6n azt eredm\u00e9nyezheti, hogy a k\u00fcl\u00f6nb\u00f6z\u0151 szerverek szinkroniz\u00e1latlan \u00e1llapotban maradnak. <\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"kak-reshat-3\">Hogyan oldjuk meg<\/h4>\n<p><\/p>\n<p>Ilyen esetekben a projekted m\u00e1r nagy, lehet, hogy m\u00e1r \u00e9rett, \u00e9s a Liquibase k\u00fcl\u00f6n\u00e1ll\u00f3 k\u00fcls\u0151 eszk\u00f6zk\u00e9nt l\u00e9p fel. Az a helyzet, hogy a Liquibase k\u00f6nyvt\u00e1rk\u00e9nt jar f\u00e1jlba van csomagolva, \u00e9s dolgozhat f\u00fcgg\u0151s\u00e9gk\u00e9nt a projekt belsej\u00e9ben, vagy \u00f6n\u00e1ll\u00f3an is. <\/p>\n<p><\/p>\n<p>\u00d6n\u00e1ll\u00f3 m\u00f3dban a migr\u00e1ci\u00f3k alkalmaz\u00e1s\u00e1t a CI\/CD k\u00f6rnyezetedre vagy az \u00fczemeltet\u00e9si specialist\u00e1id er\u0151s karjaira lehet b\u00edzni. Ehhez sz\u00fcks\u00e9ges a Liquibase parancssor. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.liquibase.org\/documentation\/command_line.html\">https:\/\/www.liquibase.org\/documentation\/command_line.html<\/a><\/noindex>. Ebben a m\u00f3dban lehet\u0151s\u00e9g ny\u00edlik az alkalmaz\u00e1s ind\u00edt\u00e1s\u00e1ra m\u00e1r azut\u00e1n, hogy minden sz\u00fcks\u00e9ges migr\u00e1ci\u00f3t v\u00e9grehajtottak.<\/p>\n<p><\/p>\n<h2 id=\"vyvod\">K\u00f6vetkeztet\u00e9s<\/h2>\n<p><\/p>\n<p>Val\u00f3j\u00e1ban sokkal t\u00f6bb csapda lehet az adatb\u00e1zis-migr\u00e1ci\u00f3k sor\u00e1n, \u00e9s sok k\u00f6z\u00fcl\u00fck kreat\u00edv megk\u00f6zel\u00edt\u00e9st ig\u00e9nyel. Fontos meg\u00e9rteni, hogy ha a megfelel\u0151 m\u00f3don haszn\u00e1lj\u00e1k az eszk\u00f6zt, akkor ezeknek a csapd\u00e1knak a t\u00f6bbs\u00e9ge elker\u00fclhet\u0151. Szem\u00e9lyesen t\u00f6bbf\u00e9lek\u00e9ppen is tal\u00e1lkoztam mindezekkel a probl\u00e9m\u00e1kkal, \u00e9s n\u00e9melyik\u00fck az \u00e9n hib\u00e1im k\u00f6vetkezm\u00e9nye volt. Legt\u00f6bbsz\u00f6r ez figyelmetlens\u00e9gb\u0151l fakad, de n\u00e9ha a szersz\u00e1m haszn\u00e1lat\u00e1nak b\u0171n\u00f6s tehetetlens\u00e9ge miatt.<\/p>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/epam_systems\/blog\/489198\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e, \u0438 \u0432\u043e\u0442 \u043e\u043f\u044f\u0442\u044c! \u041d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Liquibase \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c. \u041a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u043d\u0435 \u0432\u0441\u0435 \u043c\u043e\u043b\u043e\u0434\u044b\u0435 \u0447\u043b\u0435\u043d\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0443\u043c\u0435\u044e\u0442 \u0435\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u042f \u043f\u0440\u043e\u0432\u0451\u043b \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0432\u043e\u0440\u043a\u0448\u043e\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0442\u0435\u043c \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u044e. \u0421\u0442\u0430\u0442\u044c\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0441\u043e\u0432\u0435\u0442\u044b \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u0440\u0435\u0445 \u0441\u0430\u043c\u044b\u0445 \u044f\u0432\u043d\u044b\u0445 \u043b\u043e\u0432\u0443\u0448\u0435\u043a, \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":70974,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-70973","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e, \u0438 \u0432\u043e\u0442 \u043e\u043f\u044f\u0442\u044c! \u041d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Liquibase \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-ne-vystrelit-sebe-v-nogu-ispolzuya-liquibase\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u043d\u0435 \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0432 \u043d\u043e\u0433\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Liquibase | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e, \u0438 \u0432\u043e\u0442 \u043e\u043f\u044f\u0442\u044c! \u041d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Liquibase \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-ne-vystrelit-sebe-v-nogu-ispolzuya-liquibase\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-22T21:58:26+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-03T13:14:41+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Hogyan ne l\u0151jj\u00fcnk a l\u00e1bunkra a Liquibase haszn\u00e1lat\u00e1val | ProHoster","description":"Soha nem volt ilyen, \u00e9s \u00edme megint! Egy \u00faj projekt keret\u00e9ben \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy a Liquibase-t\u0151l kezdj\u00fck, hogy elker\u00fclj\u00fck a j\u00f6v\u0151beli probl\u00e9m\u00e1kat.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-ne-vystrelit-sebe-v-nogu-ispolzuya-liquibase","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u043d\u0435 \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0432 \u043d\u043e\u0433\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Liquibase | ProHoster","og:description":"\u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e, \u0438 \u0432\u043e\u0442 \u043e\u043f\u044f\u0442\u044c! \u041d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Liquibase \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-ne-vystrelit-sebe-v-nogu-ispolzuya-liquibase","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-22T21:58:26+00:00","article:modified_time":"2020-03-03T13:14:41+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"70973","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:10:24","updated":"2022-09-28 08:39:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/70973","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=70973"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/70973\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/70974"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=70973"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=70973"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=70973"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}