{"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\/sq\/blog\/administrirovanie\/kak-ne-vystrelit-sebe-v-nogu-ispolzuya-liquibase","title":{"rendered":"Si si d\u00ebgjoni n\u00eb k\u00ebmb\u00eb q\u00eb p\u00ebrdorni Liquibase","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kurr\u00eb nuk ka ndodhur, dhe ja p\u00ebrs\u00ebri!<\/p>\n<p><\/p>\n<p>N\u00eb nj\u00eb projekt t\u00eb ri, ne vendos\u00ebm t\u00eb p\u00ebrdorim Liquibase q\u00eb n\u00eb fillim p\u00ebr t\u00eb shmangur probleme n\u00eb t\u00eb ardhmen. Si\u00e7 duket, jo t\u00eb gjith\u00eb an\u00ebtar\u00ebt e rinj t\u00eb ekipit din\u00eb ta p\u00ebrdorin at\u00eb si\u00e7 duhet. Mbajta nj\u00eb pun\u00ebtori t\u00eb brendshme, t\u00eb cil\u00ebn m\u00eb pas vendosa ta shnd\u00ebrroj n\u00eb nj\u00eb artikull. <\/p>\n<p><\/p>\n<p>Artikulli p\u00ebrmban k\u00ebshilla t\u00eb dobishme dhe nj\u00eb p\u00ebrshkrim t\u00eb tre grackave m\u00eb t\u00eb dukshme, n\u00eb t\u00eb cilat mund t\u00eb bien ata q\u00eb punojn\u00eb me mjete p\u00ebr migrimin e bazave t\u00eb t\u00eb dh\u00ebnave relacionale, sidomos Liquibase. \u00cbsht\u00eb e drejtuar p\u00ebr zhvilluesit Java n\u00eb nivelin Junior dhe Middle, nd\u00ebrsa p\u00ebr zhvilluesit m\u00eb t\u00eb p\u00ebrvojsh\u00ebm mund t\u00eb jet\u00eb interesante p\u00ebr t\u00eb strukturuar dhe p\u00ebrs\u00ebritur at\u00eb q\u00eb, me siguri, tashm\u00eb e din\u00eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si si d\u00ebgjoni n\u00eb k\u00ebmb\u00eb q\u00eb p\u00ebrdorni Liquibase\" 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>Liquibase dhe Flyway jan\u00eb teknologjit\u00eb kryesore q\u00eb konkurrojn\u00eb p\u00ebr zgjidhjen e problemeve t\u00eb kontrollit t\u00eb versioneve t\u00eb strukturave relacionale n\u00eb bot\u00ebn Java. E para \u00ebsht\u00eb plot\u00ebsisht falas dhe n\u00eb praktik\u00eb shpesh zgjidhet p\u00ebr p\u00ebrdorim, prandaj edhe Liquibase \u00ebsht\u00eb zgjedhur si hero i publikimit. Sidoqoft\u00eb, disa nga praktikat e p\u00ebrshkruara mund t\u00eb jen\u00eb universale, n\u00eb var\u00ebsi t\u00eb arhitektur\u00ebs s\u00eb aplikacionit tuaj. <\/p>\n<p><\/p>\n<p>Migrimi i struktura relacionale \u00ebsht\u00eb nj\u00eb m\u00ebnyr\u00eb e detyruar p\u00ebr t\u00eb luftuar fleksibilitetin e dob\u00ebt t\u00eb depozitave t\u00eb dh\u00ebnash relacionale. N\u00eb epok\u00ebn e mod\u00ebs p\u00ebr OOP, stili i pun\u00ebs me DB supozonte se ne do t\u00eb p\u00ebrshkruajm\u00eb nj\u00eb her\u00eb skem\u00ebn dhe nuk do ta prekni m\u00eb. Por realiteti \u00ebsht\u00eb gjithmon\u00eb i till\u00eb q\u00eb gjith\u00e7ka ndryshon, dhe ndryshimet n\u00eb struktur\u00ebn e tabelave jan\u00eb t\u00eb nevojshme mjaft shpesh. Natyrisht, procesi \u00ebsht\u00eb vetvetiu i dhimbsh\u00ebm dhe i pak\u00ebndsh\u00ebm. <\/p>\n<p><\/p>\n<p>Nuk do t\u00eb thellohem n\u00eb p\u00ebrshkrimin e teknologjis\u00eb dhe udh\u00ebzimet p\u00ebr shtimin e bibliotek\u00ebs n\u00eb projektin tim; p\u00ebr k\u00ebt\u00eb tem\u00eb jan\u00eb shkruar mjaft artikuj:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/460377\/\">P\u00ebrdorimi i Liquibase p\u00ebr menaxhimin e struktur\u00ebs s\u00eb DB n\u00eb aplikacionin Spring Boot. Pjesa 1<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/460907\/\">P\u00ebrdorimi i Liquibase p\u00ebr menaxhimin e struktur\u00ebs s\u00eb DB n\u00eb aplikacionin Spring Boot. Pjesa 2<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/436994\/\">Liquibase dhe Maven<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/330662\/\">Qasjet p\u00ebr versionimin e ndryshimeve t\u00eb DB<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/271719\/\">Spring MVC\/Security, REST, Hibernate, Liquibase nisemi n\u00eb dy rreshta<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, ka qen\u00eb nj\u00eb artikull i shk\u00eblqyer mbi k\u00ebshillat e dobishme:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/179425\/\">P\u00ebrdorimi i Liquibase pa dhimbje koke. 10 k\u00ebshilla nga eksperimentet e v\u00ebrteta t\u00eb zhvillimit<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"sovety\">K\u00ebshilla<\/h2>\n<p><\/p>\n<p>Dua t\u00eb ndaj k\u00ebshillat dhe komentet e mia, q\u00eb kan\u00eb lindur p\u00ebrmes djers\u00ebs, gjakut dhe dhimbjes s\u00eb zgjidhjes s\u00eb problemeve me migrimin.<\/p>\n<p><\/p>\n<h3 id=\"1--pered-rabotoy-sleduet-oznakomitsya-s-razdelom-luchshih-praktik-na-saytehttpswwwliquibaseorgbestpracticeshtml-liquibase\">1. Para t\u00eb filloni, duhet t\u00eb njiheni me seksionin e praktikave m\u00eb t\u00eb mira n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.liquibase.org\/bestpractices.html\">t\u00eb internetit<\/a><\/noindex> Liquibase<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.liquibase.org\/bestpractices.html\">Aty<\/a><\/noindex> p\u00ebrshkruhen gj\u00ebra t\u00eb thjeshta, por shum\u00eb t\u00eb r\u00ebnd\u00ebsishme, pa t\u00eb cilat p\u00ebrdorimi i bibliotek\u00ebs mund t'ju komplikoj\u00eb jet\u00ebn. P\u00ebr shembull, nj\u00eb qasje e nesht\u00ebr p\u00ebr menaxhimin e chanjset do t\u00eb sjell\u00eb ngadal\u00eb konfuzion dhe migrime t\u00eb prishura. N\u00ebse ndryshimet e lidhura me nj\u00ebra-tjetr\u00ebn n\u00eb struktur\u00ebn e DB-s\u00eb dhe logjik\u00ebn e sh\u00ebrbimeve nuk aplikohen n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb, ka nj\u00eb probabilitet t\u00eb madh q\u00eb kjo t\u00eb \u00e7oj\u00eb n\u00eb teste t\u00eb kuqe ose mjedis t\u00eb prishur. P\u00ebr m\u00eb tep\u00ebr, rekomandimet p\u00ebr p\u00ebrdorimin e Liquibase n\u00eb faqen zyrtare p\u00ebrmbajn\u00eb nj\u00eb pik\u00eb p\u00ebr zhvillimin dhe kontrollin e skripteve t\u00eb rollback-it s\u00eb bashku me skripte t\u00eb tjera kryesore t\u00eb migrimit. Dhe n\u00eb artikullin <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/178665\/\">https:\/\/habr.com\/ru\/post\/178665\/<\/a><\/noindex> ka shembuj Kodi q\u00eb lidhen me migrimet dhe mekanizmin e rollback. <\/p>\n<p><\/p>\n<h3 id=\"2-esli-nachali-ispolzovat-sredstva-migracii--ne-dopuskayte-manualnyh-ispravleniy-v-strukture-bazy\">2. N\u00ebse keni filluar t\u00eb p\u00ebrdorni mjete migrimi \u2013 mos lejoni ndryshime manuale n\u00eb struktur\u00ebn e baz\u00ebs s\u00eb t\u00eb dh\u00ebnave.<\/h3>\n<p><\/p>\n<p>Si thoni: \"Nj\u00eb her\u00eb Persil \u2014 gjithmon\u00eb Persil\". N\u00ebse baza e aplikacionit tuaj ka filluar t\u00eb menaxhohet nga Liquibase, \u00e7do ndryshim manual menj\u00ebher\u00eb \u00e7on n\u00eb nj\u00eb gjendje t\u00eb papajtueshme, dhe niveli i besimit n\u00eb \u00e7enset b\u00ebhet zero. Rreziqet e mundshme \u2014 disa or\u00eb t\u00eb humbura p\u00ebr rikuperimin e baz\u00ebs, n\u00eb rastin m\u00eb t\u00eb keq \u2014 nj\u00eb server i shkat\u00ebrruar. N\u00ebse n\u00eb ekipin tuaj ka nj\u00eb DBA Architect \"t\u00eb vjet\u00ebr\", shpjegoni me durim dhe me v\u00ebmendje se si gjith\u00e7ka do t\u00eb shkoj\u00eb keq, n\u00ebse ai thjesht editon baz\u00ebn sipas d\u00ebshires nga, p\u00ebr shembull, SQL Developer. <\/p>\n<p><\/p>\n<h3 id=\"3-esli-chendzhset-uzhe-byl-zapushen-v-repozitoriy-izbegayte-redaktirovaniya\">3. N\u00ebse \u00e7enseti tashm\u00eb \u00ebsht\u00eb ngarkuar n\u00eb repository, shmangni redaktimin<\/h3>\n<p><\/p>\n<p>N\u00ebse nj\u00eb zhvillues tjet\u00ebr b\u00ebnte nj\u00eb pull dhe aplikonte nj\u00eb set ndryshimesh q\u00eb m\u00eb von\u00eb do t\u00eb redaktohet, ai do t'ju p\u00ebrmendte me fjal\u00eb t\u00eb mira kur t\u00eb marr\u00eb nj\u00eb gabim gjat\u00eb startimit t\u00eb aplikacionit. N\u00ebse redaktimi i setit t\u00eb ndryshimeve ndonj\u00ebher\u00eb do t\u00eb p\u00ebrfundoj\u00eb n\u00eb zhvillim, do t\u00eb nevojitet t\u00eb ecohet nj\u00eb rrug\u00eb e v\u00ebshtir\u00eb me hotfixe. Thelbi i problemit q\u00ebndron n\u00eb validimin e ndryshimeve sipas hash-it \u2014 mekanizmi kryesor i Liquibase. Gjat\u00eb redaktimit t\u00eb kodit t\u00eb setit t\u00eb ndryshimeve, ndryshon hash-i. Redaktimi i setit t\u00eb ndryshimeve \u00ebsht\u00eb i mundur vet\u00ebm kur ka mund\u00ebsi p\u00ebr t\u00eb rivendosur t\u00eb gjith\u00eb baz\u00ebn nga fillimi pa humbje t\u00eb t\u00eb dh\u00ebnave. N\u00eb k\u00ebt\u00eb rast, refaktorizimi i kodit SQL ose XML mund, p\u00ebrkundrazi, t\u00eb leht\u00ebsoj\u00eb jet\u00ebn, duke e b\u00ebr\u00eb migrimin m\u00eb t\u00eb lexuesh\u00ebm. Nj\u00eb shembull mund t\u00eb jet\u00eb kur n\u00eb fillimin e aplikacionit skema e baz\u00ebs s\u00eb t\u00eb dh\u00ebnave origjinale ishte e miratuar brenda ekipit. <\/p>\n<p><\/p>\n<h3 id=\"4--imey-proverennye-bekapy-baz-dannyh-esli-eto-vozmozhno\">4. Sigurohu q\u00eb t\u00eb kesh kopje rezerv\u00eb t\u00eb besueshme t\u00eb bazave t\u00eb t\u00eb dh\u00ebnave, n\u00ebse \u00ebsht\u00eb e mundur<\/h3>\n<p><\/p>\n<p>K\u00ebtu, mendoj, gjith\u00e7ka \u00ebsht\u00eb e qart\u00eb. N\u00ebse ndonj\u00ebher\u00eb migrazha d\u00ebshtoi, gjith\u00e7ka mund t\u00eb kthehet mbrapsht. N\u00eb Liquibase ka nj\u00eb mjet p\u00ebr kthimin e ndryshimeve, por skriptet p\u00ebr kthimin e ndryshimeve shkruhen nga vet\u00eb zhvilluesi, dhe n\u00eb to mund t\u00eb ket\u00eb probleme me t\u00eb nj\u00ebjt\u00ebn mund\u00ebsi si n\u00eb skriptet e setit kryesor t\u00eb ndryshimeve. Kjo do t\u00eb thot\u00eb se \u00ebsht\u00eb e dobishme t\u00eb kesh backup p\u00ebr \u00e7do rast. <\/p>\n<p><\/p>\n<h3 id=\"5-ispolzuy-proverennye-bekapy-baz-dannyh-v-razrabotke-esli-eto-vozmozhno\">5. P\u00ebrdor backup t\u00eb verifikuara p\u00ebr bazat e t\u00eb dh\u00ebnave n\u00eb zhvillim, n\u00ebse \u00ebsht\u00eb e mundur.<\/h3>\n<p><\/p>\n<p>N\u00ebse kjo nuk \u00ebsht\u00eb n\u00eb p\u00ebrputhje me marr\u00ebveshjet dhe privat\u00ebsin\u00eb, n\u00ebse n\u00eb baz\u00eb nuk ka t\u00eb dh\u00ebna personale dhe nuk \u00ebsht\u00eb aq e r\u00ebnd\u00eb sa dy diell\u00eb \u2014 para aplikimit n\u00eb server\u00ebt e gjall\u00eb, migrazha mund t\u00eb kontrollohet se si funksionon n\u00eb makin\u00ebn e zhvilluesit dhe t\u00eb llogaritet pothuajse 100% e problemeve t\u00eb mundshme gjat\u00eb migracionit. <\/p>\n<p><\/p>\n<h3 id=\"6-obschaysya-s-drugimi-razrabotchikami-v-komande\">6. Komuniko me zhvillues t\u00eb tjer\u00eb n\u00eb ekip.<\/h3>\n<p><\/p>\n<p>N\u00eb nj\u00eb proces zhvillimi t\u00eb organizuar si\u00e7 duhet, \u00e7do an\u00ebtar i ekipit di se \u00e7far\u00eb \u00ebsht\u00eb duke b\u00ebr\u00eb. N\u00eb t\u00eb v\u00ebrtet\u00eb, shpesh nuk \u00ebsht\u00eb k\u00ebshtu, prandaj, n\u00ebse po p\u00ebrgatitni ndryshime n\u00eb struktur\u00ebn e baz\u00ebs s\u00eb t\u00eb dh\u00ebnave n\u00eb kuad\u00ebr t\u00eb detyr\u00ebs tuaj, \u00ebsht\u00eb e preferueshme t\u00eb njoftoni gjithashtu t\u00eb gjith\u00eb ekipin. N\u00ebse dikush tjet\u00ebr po b\u00ebn ndryshime n\u00eb m\u00ebnyr\u00eb paralel, ju duhet t\u00eb organizoheni me kujdes. \u00cbsht\u00eb mir\u00eb t\u00eb komunikoni me koleg\u00ebt edhe pas p\u00ebrfundimit t\u00eb pun\u00ebs, jo vet\u00ebm n\u00eb fillim. Shum\u00eb probleme t\u00eb mundshme me \u00e7ensheti mund t\u00eb zgjidhen n\u00eb faz\u00ebn e shqyrtimit t\u00eb kodit. <\/p>\n<p><\/p>\n<h3 id=\"7-dumay-chto-delaesh\">7. Mendoni p\u00ebr at\u00eb q\u00eb po b\u00ebni!<\/h3>\n<p><\/p>\n<p>Duket si nj\u00eb k\u00ebshill\u00eb e vetme, e aplikueshme n\u00eb situata t\u00eb ndryshme. Megjithat\u00eb, shum\u00eb probleme do t\u00eb ishin evituar n\u00ebse zhvilluesi do t\u00eb analizonte p\u00ebrs\u00ebri se \u00e7far\u00eb po b\u00ebn dhe \u00e7far\u00eb ndikimi mund t\u00eb ket\u00eb. Puna me migrimet gjithmon\u00eb k\u00ebrkon v\u00ebmendje dhe kujdes t\u00eb shtuar. <\/p>\n<p><\/p>\n<h2 id=\"lovushki\">Kapaciteti<\/h2>\n<p><\/p>\n<p>Tani le ta shqyrtojm\u00eb situata tipike n\u00eb t\u00eb cilat mund t\u00eb bini n\u00eb prit\u00eb n\u00ebse nuk i ndiqni k\u00ebshillat e m\u00ebsip\u00ebrme dhe \u00e7far\u00eb, n\u00eb t\u00eb v\u00ebrtet\u00eb, duhet t\u00eb b\u00ebni?<\/p>\n<p><\/p>\n<h3 id=\"situaciya-1-dva-razrabotchika-pytayutsya-odnovremenno-dobavlyat-novye-chendzhsety\">Situata 1. Dy zhvillues po p\u00ebrpiqen t\u00eb shtojn\u00eb ndryshime t\u00eb reja n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb.<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si si d\u00ebgjoni n\u00eb k\u00ebmb\u00eb q\u00eb p\u00ebrdorni Liquibase\" src=\"\/wp-content\/uploads\/2020\/02\/20706fc970510bc06634fa001a4c7ceb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVasja dhe Petja d\u00ebshirojn\u00eb t\u00eb krijojn\u00eb nj\u00eb changset versi 4, pa e ditur nj\u00ebri-tjetrin. Ata b\u00ebn\u00eb ndryshime n\u00eb struktur\u00ebn e DB, dhe l\u00ebshuan nj\u00eb pull request, me skedar\u00eb t\u00eb ndrysh\u00ebm t\u00eb changset-it. M\u00eb pas propozohet mekanizmi i m\u00ebposht\u00ebm i veprimit:<\/p>\n<p><\/p>\n<h4 id=\"kak-reshat\">Si t\u00eb zgjidhni<\/h4>\n<p><\/p>\n<ol>\n<li>N\u00eb nj\u00eb m\u00ebnyr\u00eb, koleg\u00ebt duhet t\u00eb bie dakord mbi rendin e aplikimit t\u00eb changset-eve t\u00eb tyre, le t\u00eb themi, changset-i i Pet\u00ebs duhet t\u00eb aplikohet i pari. <\/li>\n<li>Nj\u00ebra prej tyre duhet t\u00eb pajtoj\u00eb tjetrin dhe t\u00eb markoj\u00eb changset-in e Vas\u00ebs si versioni 5. Kjo mund t\u00eb b\u00ebhet p\u00ebrmes Cherry Pick ose nj\u00eb bashkim t\u00eb kujdessh\u00ebm. <\/li>\n<li>Pas ndryshimeve \u00ebsht\u00eb e domosdoshme t\u00eb kontrollohet vlefshm\u00ebria e veprimeve t\u00eb kryera.<br \/>\nN\u00eb t\u00eb v\u00ebrtet\u00eb, mekanizmat e Liquibase do t'u lejojn\u00eb t\u00eb ken\u00eb n\u00eb repository dy changset-e t\u00eb versionit 4, prandaj mund ta lini gjith\u00e7ka si\u00e7 \u00ebsht\u00eb. K\u00ebshtu, do t\u00eb keni thjesht dy ndryshime t\u00eb versionit 4 me emra t\u00eb ndrysh\u00ebm. Me k\u00ebt\u00eb qasje, m\u00eb von\u00eb b\u00ebhet shum\u00eb e v\u00ebshtir\u00eb t\u00eb orientoheni n\u00eb versionet e baz\u00ebs s\u00eb t\u00eb dh\u00ebnave. <\/li>\n<\/ol>\n<p><\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, Liquibase, si sht\u00ebpia e hobbit\u00ebve, mban shum\u00eb sekrete. Nj\u00eb prej tyre \u00ebsht\u00eb \u00e7el\u00ebsi validCheckSum, i cili shfaqet q\u00eb nga versioni 1.7 dhe lejon t\u00eb specificohet nj\u00eb vler\u00eb valide hash p\u00ebr nj\u00eb set ndryshimesh, pavar\u00ebsisht se \u00e7far\u00eb \u00ebsht\u00eb ruajtur n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave. Dokumentacioni <noindex><a rel=\"nofollow\" href=\"https:\/\/www.liquibase.org\/documentation\/changeset.html\">https:\/\/www.liquibase.org\/documentation\/changeset.html<\/a><\/noindex> thot\u00eb si vijon:<\/p>\n<p><\/p>\n<blockquote><p>Shtoni nj\u00eb checksum q\u00eb konsiderohet e valid p\u00ebr k\u00ebt\u00eb changeSet, pavar\u00ebsisht se \u00e7far\u00eb \u00ebsht\u00eb ruajtur n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave. P\u00ebrdoret kryesisht kur keni nevoj\u00eb t\u00eb ndryshoni nj\u00eb changeSet dhe nuk d\u00ebshironi q\u00eb t\u00eb shfaqen gabime n\u00eb bazat e t\u00eb dh\u00ebnave mbi t\u00eb cilat ka funksionuar tashm\u00eb (nuk \u00ebsht\u00eb nj\u00eb procedur\u00eb e rekomanduar)<\/p><\/blockquote>\n<p>Po-po, nj\u00eb procedur\u00eb e till\u00eb nuk rekomandohet. Por ndonj\u00ebher\u00eb nj\u00eb magjistar i fort\u00eb zot\u00ebron edhe teknika t\u00eb err\u00ebta. <\/p>\n<p><\/p>\n<h3 id=\"situaciya-2-migraciya-kotoraya-zavisit-ot-dannyh\">Situata 2. Migrimi q\u00eb varet nga t\u00eb dh\u00ebnat<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si si d\u00ebgjoni n\u00eb k\u00ebmb\u00eb q\u00eb p\u00ebrdorni Liquibase\" src=\"\/wp-content\/uploads\/2020\/02\/31a6eebb55278c0631115bf16483c7b8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Supozoni q\u00eb nuk keni mund\u00ebsi t\u00eb p\u00ebrdorni kopje rezerv\u00eb t\u00eb bazave nga server\u00ebt e gjall\u00eb. Petja krijoi nj\u00eb set ndryshimesh, e kontrolloi at\u00eb lokal dhe me nj\u00eb besim t\u00eb plot\u00eb n\u00eb t\u00eb v\u00ebrtet\u00ebn e tij b\u00ebri nj\u00eb k\u00ebrkes\u00eb t\u00ebrheqjeje p\u00ebr zhvillimin. Lideri i projektit p\u00ebr \u00e7do rast e shqyrtoi, kontrolloi n\u00ebse Petja e kishte shqyrtuar, dhe pastaj e p\u00ebrfshiu. Por shp\u00ebrndarja n\u00eb serverin e zhvillimit d\u00ebshtoi.<\/p>\n<p><\/p>\n<p>N\u00eb t\u00eb v\u00ebrtet\u00eb, kjo \u00ebsht\u00eb e mundur, dhe askush nuk \u00ebsht\u00eb i sigurt nga kjo. Kjo ndodh n\u00eb rastet kur modifikimet e struktur\u00ebs s\u00eb tabelave jan\u00eb ndonj\u00ebher\u00eb t\u00eb lidhura me t\u00eb dh\u00ebna t\u00eb caktuara nga DB. \u00cbsht\u00eb e qart\u00eb se, n\u00ebse baza e t\u00eb dh\u00ebnave e Petrit \u00ebsht\u00eb plot\u00ebsisht me t\u00eb dh\u00ebna testuese, ajo mund t\u00eb mos mbuloj\u00eb t\u00eb gjitha rastet problematike. P\u00ebr shembull, gjat\u00eb fshirjes s\u00eb tabel\u00ebs, rezulton se jan\u00eb regjistrime n\u00eb tabela t\u00eb tjera p\u00ebrmes Foreign Key, t\u00eb lidhura me regjistrimet n\u00eb t\u00eb fshir\u00eb. Ose, gjat\u00eb ndryshimit t\u00eb llojit t\u00eb kolon\u00ebs, rezulton se jo 100% e t\u00eb dh\u00ebnave mund t\u00eb konvertohen n\u00eb llojin e ri. <\/p>\n<p><\/p>\n<h4 id=\"kak-reshat-1\">Si t\u00eb zgjidhni<\/h4>\n<p><\/p>\n<ul>\n<li>T\u00eb shkruhen skripte t\u00eb ve\u00e7anta, t\u00eb cilat do t\u00eb aplikohen nj\u00eb her\u00eb s\u00eb bashku me migrimin dhe do t\u00eb sjellin t\u00eb dh\u00ebnat n\u00eb nj\u00eb form\u00eb t\u00eb duhur. Kjo \u00ebsht\u00eb nj\u00eb qasje e zakonshme p\u00ebr zgjidhjen e problemit t\u00eb transferimit t\u00eb t\u00eb dh\u00ebnave n\u00eb strukturat e reja pas aplikimit t\u00eb migrimeve, por di\u00e7ka e ngjashme mund t\u00eb aplikohet edhe para, n\u00eb raste t\u00eb ve\u00e7anta. Kjo rrug\u00eb, natyrisht, nuk \u00ebsht\u00eb gjithmon\u00eb e disponueshme, sepse t\u00eb redaktosh t\u00eb dh\u00ebnat n\u00eb server\u00ebt aktiv\u00eb mund t\u00eb jet\u00eb e rrezikshme dhe madje shkat\u00ebrruese. <\/li>\n<li>Nj\u00eb m\u00ebnyr\u00eb tjet\u00ebr e komplikuar \u00ebsht\u00eb t\u00eb redaktoni setin ekzistues t\u00eb ndryshimeve. Sfidimi \u00ebsht\u00eb se t\u00eb gjitha DB-t\u00eb ku ai \u00ebsht\u00eb aplikuar tashm\u00eb do t\u00eb duhet t\u00eb rifillohen. \u00cbsht\u00eb shum\u00eb e mundshme q\u00eb e gjith\u00eb ekipi i backend-it do t\u00eb detyrohet t\u00eb p\u00ebrdit\u00ebsoj\u00eb DB-n\u00eb nga fillimi n\u00eb m\u00ebnyr\u00eb lokale. <\/li>\n<li>Dhe m\u00ebnyra m\u00eb universale \u00ebsht\u00eb t\u00eb transferohet problemi me t\u00eb dh\u00ebnat n\u00eb ambientin e zhvilluesit duke rikrijuar situat\u00ebn e nj\u00ebjt\u00eb dhe duke shtuar nj\u00eb set t\u00eb ri ndryshimesh, deri n\u00eb at\u00eb t\u00eb shkat\u00ebrruar, i cili do t\u00eb lejoj\u00eb p\u00ebrmir\u00ebsimin e problemit.<br \/>\n<img decoding=\"async\" alt=\"Si si d\u00ebgjoni n\u00eb k\u00ebmb\u00eb q\u00eb p\u00ebrdorni Liquibase\" src=\"\/wp-content\/uploads\/2020\/02\/b5d28a940a7a35b6cd7a819a8e68f027.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00eb p\u00ebrgjith\u00ebsi, sa m\u00eb shum\u00eb baza e t\u00eb dh\u00ebnave t\u00eb jet\u00eb e ngjashme me baz\u00ebn e serverit prodhues, aq m\u00eb pak ka mund\u00ebsi q\u00eb problemet me migrimet t\u00eb shp\u00ebrndahen n\u00eb m\u00ebnyr\u00eb t\u00eb gjer\u00eb. Dhe, sigurisht, para se t\u00eb d\u00ebrgoni setin e ndryshimeve n\u00eb depo, \u00ebsht\u00eb mir\u00eb t\u00eb mendoni disa her\u00eb n\u00ebse do t\u00eb thyej\u00eb ndonj\u00eb gj\u00eb. <\/p>\n<p><\/p>\n<h3 id=\"situaciya-3-liquibase-nachinaet-primenyatsya-uzhe-posle-vyhoda-v-prodakshn\">Situata 3. Liquibase fillon t\u00eb aplikohet vet\u00ebm pas daljes n\u00eb prodhim.<\/h3>\n<p><\/p>\n<p>Supozoni se lideri i ekipit i k\u00ebrkoi Petrit t\u00eb lidh\u00eb Liquibase n\u00eb projekt, megjithat\u00eb projekti \u00ebsht\u00eb tashm\u00eb n\u00eb prodhim dhe ekziston nj\u00eb struktur\u00eb e dh\u00ebnash.<\/p>\n<p><\/p>\n<p>Prandaj, problemi \u00ebsht\u00eb q\u00eb n\u00eb \u00e7do server t\u00eb ri ose makin\u00eb zhvilluesi, t\u00eb dh\u00ebnat e k\u00ebtyre tabelave duhet t\u00eb rind\u00ebrtohen nga e para, nd\u00ebrsa mjedisi ekzistues duhet t\u00eb mbahet n\u00eb nj\u00eb gjendje konsistente, duke qen\u00eb gati p\u00ebr t\u00eb pranuar \u00e7enshta t\u00eb reja. <\/p>\n<p><\/p>\n<h4 id=\"kak-reshat-2\">Si t\u00eb zgjidhni<\/h4>\n<p><\/p>\n<p>K\u00ebtu gjithashtu ka disa m\u00ebnyra:<\/p>\n<p><\/p>\n<ul>\n<li>E para dhe m\u00eb e obvious \u00ebsht\u00eb t\u00eb kesh nj\u00eb skenar t\u00eb ve\u00e7ant\u00eb, i cili duhet t\u00eb zbatohet manualisht gjat\u00eb inicializimit t\u00eb nj\u00eb ambienti t\u00eb ri. <\/li>\n<li>E dyta \u2014 m\u00eb pak e obvious, t\u00eb kesh nj\u00eb migrim t\u00eb Liquibase, i cili ndodhet n\u00eb nj\u00eb Kontekst tjet\u00ebr Liquibase, dhe ta aplikosh at\u00eb. M\u00eb shum\u00eb mund t\u00eb lexoni rreth Konteskteve t\u00eb Liquibase k\u00ebtu: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.liquibase.org\/documentation\/contexts.html\">https:\/\/www.liquibase.org\/documentation\/contexts.html<\/a><\/noindex>. N\u00eb p\u00ebrgjith\u00ebsi, kjo \u00ebsht\u00eb nj\u00eb mekaniz\u00ebm interesant, q\u00eb mund t\u00eb aplikohet me sukses, p\u00ebr shembull, p\u00ebr testim. <\/li>\n<li>Nj\u00eb rrug\u00eb e tret\u00eb p\u00ebrb\u00ebhet nga disa hapa. S\u00eb pari, duhet t\u00eb krijohet nj\u00eb migra\u00e7\u00e3o p\u00ebr tabelat q\u00eb ekzistojn\u00eb tashm\u00eb. M\u00eb pas, ajo duhet t\u00eb aplikohet n\u00eb ndonj\u00eb ambient dhe n\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb do t\u00eb merret hash-i i saj. Hapi tjet\u00ebr \u00ebsht\u00eb t\u00eb inicializoni tabelat e zbrazta t\u00eb Liquibase n\u00eb serverin ton\u00eb t\u00eb plot\u00ebsuar, dhe n\u00eb tabel\u00ebn e historis\u00eb s\u00eb p\u00ebrdorimit t\u00eb ndryshimeve mund t\u00eb futni manualisht nj\u00eb rekord p\u00ebr nj\u00eb ndryshim t\u00eb 'aplikuar' si\u00e7 duhet me ndryshimet q\u00eb tashm\u00eb ekzistojn\u00eb n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave. N\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb, n\u00eb serverin q\u00eb ekziston, historia do t\u00eb filloj\u00eb nga versioni 2, dhe t\u00eb gjith\u00eb ambientet e reja do t\u00eb veprojn\u00eb nj\u00ebsoj.<br \/>\n<img decoding=\"async\" alt=\"Si si d\u00ebgjoni n\u00eb k\u00ebmb\u00eb q\u00eb p\u00ebrdorni Liquibase\" 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\">Situata 4. Migracionet b\u00ebhen t\u00eb m\u00ebdha dhe nuk arrijn\u00eb t\u00eb p\u00ebrfundojn\u00eb.<\/h3>\n<p><\/p>\n<p>N\u00eb fillim t\u00eb zhvillimit t\u00eb sh\u00ebrbimit, zakonisht, Liquibase p\u00ebrdoret si nj\u00eb var\u00ebsi e jashtme, dhe t\u00eb gjitha migracionet trajtohen gjat\u00eb fillimit t\u00eb aplikacionit. Megjithat\u00eb, me kalimin e koh\u00ebs, mund t\u00eb hasni k\u00ebto raste:<\/p>\n<p><\/p>\n<ul>\n<li>Migracionet b\u00ebhen t\u00eb m\u00ebdha dhe kryhen p\u00ebr nj\u00eb periudh\u00eb t\u00eb gjat\u00eb.<\/li>\n<li>Shfaqet nevoja p\u00ebr migrim n\u00eb ambiente t\u00eb shp\u00ebrndara, p\u00ebr shembull, n\u00eb disa instanca t\u00eb server\u00ebve t\u00eb DB n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb.<br \/>\nN\u00eb k\u00ebt\u00eb rast, aplikimi i zgjatur i migrimeve do t\u00eb \u00e7oj\u00eb n\u00eb skadimin e koh\u00ebs gjat\u00eb nisjes s\u00eb aplikacionit. P\u00ebr m\u00eb tep\u00ebr, aplikimi i migrimeve p\u00ebr \u00e7do instanc\u00eb t\u00eb aplikacionit ve\u00e7mas mund t\u00eb sjell\u00eb q\u00eb server\u00ebt t\u00eb jen\u00eb n\u00eb nj\u00eb gjendje t\u00eb pasinkronizuar. <\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"kak-reshat-3\">Si t\u00eb zgjidhni<\/h4>\n<p><\/p>\n<p>N\u00eb raste t\u00eb tilla, projekti juaj \u00ebsht\u00eb tashm\u00eb i madh, ndoshta edhe n\u00eb mosh\u00ebn e tij, dhe Liquibase fillon t\u00eb veproj\u00eb si nj\u00eb mjet i jasht\u00ebm i ve\u00e7ant\u00eb. Problemi \u00ebsht\u00eb se Liquibase si bibliotek\u00eb grumbullohet n\u00eb nj\u00eb skedar jar dhe mund t\u00eb funksionoj\u00eb si nj\u00eb var\u00ebsi brenda projektit, ashtu si dhe autonomisht. <\/p>\n<p><\/p>\n<p>N\u00eb modalitetin autonom, mund t\u00eb ngarkoni aplikimin e migrimeve n\u00eb mjedisin tuaj CI\/CD ose n\u00eb duar t\u00eb forta t\u00eb administrator\u00ebve tuaj t\u00eb sistemeve\/ekspert\u00ebve t\u00eb implementimit. P\u00ebr k\u00ebt\u00eb, do t\u00eb nevojitet linja e komand\u00ebs s\u00eb Liquibase. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.liquibase.org\/documentation\/command_line.html\">https:\/\/www.liquibase.org\/documentation\/command_line.html<\/a><\/noindex>N\u00eb k\u00ebt\u00eb modalitet, krijohet mund\u00ebsia p\u00ebr t\u00eb nisur aplikacionin pas p\u00ebrfundimit t\u00eb t\u00eb gjitha migrimeve t\u00eb nevojshme.<\/p>\n<p><\/p>\n<h2 id=\"vyvod\">P\u00ebrfundim<\/h2>\n<p><\/p>\n<p>N\u00eb t\u00eb v\u00ebrtet\u00eb, ka shum\u00eb m\u00eb tep\u00ebr kurthe kur punoni me migrime t\u00eb DB, dhe shum\u00eb prej tyre k\u00ebrkojn\u00eb qasje kreative. \u00cbsht\u00eb e r\u00ebnd\u00ebsishme t\u00eb kuptohet se n\u00ebse p\u00ebrdoret si\u00e7 duhet, shumica e k\u00ebtyre kurtheve mund t\u00eb shmangen. Konkretisht, un\u00eb kam hasur t\u00eb gjitha k\u00ebto probleme n\u00eb forma t\u00eb ndryshme, dhe disa nga ato ishin rezultat i gabimeve t\u00eb mia. Kryesisht ndodhin p\u00ebr shkak t\u00eb moskujdesit, por ndonj\u00ebher\u00eb - p\u00ebr shkak t\u00eb paaft\u00ebsis\u00eb kriminele p\u00ebr t\u00eb p\u00ebrdorur mjetin.<\/p>\n<p>Burimi: <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 4.9.10 - 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. \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\" \/>\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\/sq\/blog\/administrirovanie\/kak-ne-vystrelit-sebe-v-nogu-ispolzuya-liquibase\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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. \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/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\udd47Si t\u00eb mos e gjuani veten n\u00eb k\u00ebmb\u00eb, duke p\u00ebrdorur Liquibase | ProHoster","description":"Kurr\u00eb nuk ka qen\u00eb, dhe ja prap\u00eb! N\u00eb nj\u00eb projekt t\u00eb ri vendos\u00ebm t\u00eb p\u00ebrdorim Liquibase q\u00eb n\u00eb fillim, p\u00ebr t\u00eb shmangur probleme n\u00eb t\u00eb ardhmen. Si\u00e7 rezultoi, jo t\u00eb gjith\u00eb an\u00ebtar\u00ebt e rinj t\u00eb ekipit din\u00eb ta p\u00ebrdorin si\u00e7 duhet. Pata nj\u00eb workshop t\u00eb brendsh\u00ebm, t\u00eb cilin vendosa ta shnd\u00ebrroj n\u00eb nj\u00eb artikull. Artikulli p\u00ebrfshin k\u00ebshilla t\u00eb dobishme dhe p\u00ebrshkrimin e tre kurtheve m\u00eb evidente.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kak-ne-vystrelit-sebe-v-nogu-ispolzuya-liquibase","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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. \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","og:url":"https:\/\/prohoster.info\/sq\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/70973","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=70973"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/70973\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/70974"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=70973"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=70973"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=70973"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}