{"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 nuk t\u00eb l\u00ebndosh veten, duke p\u00ebrdorur Liquibase","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kurr\u00eb nuk ka qen\u00eb, dhe ja p\u00ebrs\u00ebri!<\/p>\n<p><\/p>\n<p>N\u00eb nj\u00eb projekt t\u00eb ri, vendos\u00ebm t\u00eb p\u00ebrdorim Liquibase nga fillimi, p\u00ebr t\u00eb shmangur probleme t\u00eb ardhshme. Si\u00e7 u duk, jo t\u00eb gjith\u00eb an\u00ebtar\u00ebt e rinj t\u00eb ekipit din\u00eb ta p\u00ebrdorin at\u00eb si\u00e7 duhet. Un\u00eb 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\u00ebrfshin k\u00ebshilla t\u00eb dobishme dhe p\u00ebrshkrimin e tre kurth\u00ebve m\u00eb t\u00eb dukshme n\u00eb t\u00eb cilat mund t\u00eb bjer\u00eb pun\u00ebs duke punuar me mjetet e migrimit t\u00eb strukturave t\u00eb bazave t\u00eb t\u00eb dh\u00ebnave relacional, n\u00eb ve\u00e7anti Liquibase. \u00cbsht\u00eb e destinuar p\u00ebr zhvillues Java t\u00eb nivelit Junior dhe Middle, p\u00ebr zhvilluesit m\u00eb t\u00eb p\u00ebrvojsh\u00ebm mund t\u00eb jet\u00eb interesante p\u00ebr strukturoimin dhe p\u00ebrkujtimin e asaj q\u00eb, shum\u00eb t\u00eb ngjar\u00eb, tashm\u00eb \u00ebsht\u00eb e njohur. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si nuk t\u00eb l\u00ebndosh veten, duke p\u00ebrdorur 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 konkuruese p\u00ebr zgjidhjen e detyrave t\u00eb kontrollit t\u00eb versioneve t\u00eb strukturave relacionale n\u00eb bot\u00ebn Java. E para \u00ebsht\u00eb krejt\u00ebsisht falas dhe n\u00eb praktik\u00eb shpesh zgjidhet m\u00eb shum\u00eb p\u00ebr t'u p\u00ebrdorur, prandaj Liquibase \u00ebsht\u00eb zgjedhur si hero i publikimit. Megjithat\u00eb, disa nga praktikat e p\u00ebrshkruara mund t\u00eb jen\u00eb universale, n\u00eb var\u00ebsi t\u00eb arkitektur\u00ebs s\u00eb aplikacionit tuaj. <\/p>\n<p><\/p>\n<p>Migrimet e strukturave relacionale jan\u00eb nj\u00eb m\u00ebnyr\u00eb e domosdoshme p\u00ebr t\u00eb luftuar fleksibilitetin e dob\u00ebt t\u00eb depozitave t\u00eb dh\u00ebnash relacional. N\u00eb epok\u00ebn e mod\u00ebs p\u00ebr OOP, stili i pun\u00ebs me DB n\u00ebnkuptonte q\u00eb ne do ta p\u00ebrshkruanim schem\u00ebn nj\u00eb her\u00eb dhe nuk do ta preknim m\u00eb. Por realiteti gjithmon\u00eb \u00ebsht\u00eb se gjith\u00e7ka ndryshon, dhe ndryshimet n\u00eb struktur\u00ebn e tabelave k\u00ebrkohen mjaft shpesh. Natyrisht, procesi vet\u00eb mund t\u00eb jet\u00eb 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\u00ebzimeve p\u00ebr shtimin e bibliotek\u00ebs n\u00eb projektin tuaj, 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 nisni n\u00eb dy rreshta<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, tashm\u00eb ka pasur nj\u00eb artikull t\u00eb 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 p\u00ebrvoja e zhvillimit t\u00eb v\u00ebrtet\u00eb<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"sovety\">K\u00ebshillat<\/h2>\n<p><\/p>\n<p>Dua t\u00eb ndaj k\u00ebshillat dhe komentet e mia, t\u00eb cilat lindi 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 pun\u00ebs duhet t\u00eb njohim seksionin e praktikave m\u00eb t\u00eb mira <noindex><a rel=\"nofollow\" href=\"https:\/\/www.liquibase.org\/bestpractices.html\">website<\/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 komplikohet jeta. P\u00ebr shembull, nj\u00eb qasje e pa-strukturuar ndaj menaxhimit t\u00eb \u00e7ensiseteve do t\u00eb sjell\u00eb n\u00eb nj\u00eb moment konfuzion dhe migrime t\u00eb prishura. N\u00ebse miratoni ndryshime t\u00eb nd\u00ebrlidhura n\u00eb struktur\u00ebn e DB dhe logjik\u00ebn e sh\u00ebrbimeve nuk nj\u00ebkoh\u00ebsisht, ka nj\u00eb probabilitet t\u00eb madh q\u00eb kjo t\u00eb \u00e7oj\u00eb n\u00eb teste t\u00eb kuqe ose nj\u00eb ambient 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 n\u00eb lidhje me zhvillimin dhe verifikimin e skripteve t\u00eb rihapjes s\u00eb bashk\u00eb me skriptet kryesore t\u00eb migrimit. P\u00ebr m\u00eb tep\u00ebr, n\u00eb artikull <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/178665\/\">https:\/\/habr.com\/ru\/post\/178665\/<\/a><\/noindex> jan\u00eb shembuj kodi q\u00eb i referohen migrimeve dhe mekanizmit t\u00eb rihapjes. <\/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 mjetet e migrimit - mos lejoni korrigjime manuale n\u00eb struktur\u00ebn e baz\u00ebs<\/h3>\n<p><\/p>\n<p>Si\u00e7 thon\u00eb: \u00abNj\u00eb her\u00eb Persil - gjithmon\u00eb Persil\u00bb. N\u00ebse baza e aplikacionit tuaj ka filluar t\u00eb menaxhohet nga mjetet Liquibase - \u00e7do ndryshim manual \u00e7on menj\u00ebher\u00eb n\u00eb nj\u00eb gjendje t\u00eb pa konsoliduar dhe niveli i besimit n\u00eb \u00e7ensiset b\u00ebhet zero. Rreziqet potenciale - disa or\u00eb t\u00eb humbura p\u00ebr t\u00eb rikuperuar baz\u00ebn, n\u00eb m\u00ebnyr\u00ebn m\u00eb t\u00eb keqe - nj\u00eb server i shkat\u00ebrruar. N\u00ebse ekipi juaj ka nj\u00eb DBA Arkitekt \u201ct\u00eb vjet\u00ebr\u201d, shpjegojini me durim dhe me mendje se si gjith\u00e7ka do t\u00eb shkoj\u00eb keq, n\u00ebse ai thjesht editoj\u00eb baz\u00ebn sipas d\u00ebshir\u00ebs s\u00eb tij nga nj\u00eb SQL Developer t\u00eb supozuar. <\/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 d\u00ebrguar n\u00eb depot, shmangni editimin<\/h3>\n<p><\/p>\n<p>N\u00ebse nj\u00eb zhvillues tjet\u00ebr ka b\u00ebr\u00eb pull dhe ka aplikuar \u00e7ensetin, i cili m\u00eb von\u00eb do t\u00eb redaktohet, - ai sigurisht do t'ju kujtoj\u00eb me fjal\u00eb t\u00eb mira, kur t\u00eb marr\u00eb nj\u00eb gabim gjat\u00eb fillimit t\u00eb aplikacionit. N\u00ebse editimi i \u00e7ensetit ndonj\u00ebher\u00eb kalon n\u00eb k\u00ebndin e zhvillimit - do t\u00eb duhet t\u00eb ecni nj\u00eb rrug\u00eb t\u00eb rrezikshme t\u00eb hotfixeve. Natyra e problemit ndikon n\u00eb validimin e ndryshimeve sipas vler\u00ebs s\u00eb hash-it - mekanizmi kryesor i Liquibase. Me editimin e kodit t\u00eb \u00e7ensetit, vlera e hash-it ndryshon. Editimi i \u00e7enseteve \u00ebsht\u00eb i mundur vet\u00ebm kur ka mund\u00ebsi t\u00eb ktheni t\u00eb gjith\u00eb baz\u00ebn nga e para pa humbje t\u00eb t\u00eb dh\u00ebnave. N\u00eb k\u00ebt\u00eb rast, ristrukturimi i kodit SQL ose XML mund, p\u00ebrkundrazi, t'i 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 situata kur n\u00eb fillim t\u00eb aplikacionit skema fillestare e DB u miratua brenda ekipit. <\/p>\n<p><\/p>\n<h3 id=\"4--imey-proverennye-bekapy-baz-dannyh-esli-eto-vozmozhno\">4. Keni kopje t\u00eb verifikuara t\u00eb bazave t\u00eb t\u00eb dh\u00ebnave, n\u00ebse \u00ebsht\u00eb e mundur<\/h3>\n<p><\/p>\n<p>K\u00ebtu, mendoj, \u00ebsht\u00eb e qart\u00eb. N\u00eb rast se migrimi nuk sukcesion, gjith\u00e7ka mund t\u00eb rikthehet. N\u00eb Liquibase ka nj\u00eb mjet p\u00ebr t\u00eb rikthyer ndryshimet, por skriptet p\u00ebr rikthimin i shkruan gjithashtu zhvilluesi dhe ato mund t\u00eb ken\u00eb probleme me t\u00eb nj\u00ebjt\u00ebn probabilitet si skriptet e sets \u00e7\u00ebshtjes kryesore. Kjo do t\u00eb thot\u00eb se \u00ebsht\u00eb e dobishme t\u00eb kesh kopje rezerv\u00eb n\u00eb \u00e7do rast. <\/p>\n<p><\/p>\n<h3 id=\"5-ispolzuy-proverennye-bekapy-baz-dannyh-v-razrabotke-esli-eto-vozmozhno\">5. P\u00ebrdorni kopje t\u00eb verifikuara t\u00eb bazave t\u00eb t\u00eb dh\u00ebnave n\u00eb zhvillim, n\u00ebse \u00ebsht\u00eb e mundur<\/h3>\n<p><\/p>\n<p>N\u00ebse nuk \u00ebsht\u00eb n\u00eb kund\u00ebrshtim me kontratat dhe privat\u00ebsin\u00eb, n\u00ebse baza nuk ka t\u00eb dh\u00ebna personale, dhe ajo nuk peshon si dy diell - para aplikimit n\u00eb server\u00ebt e gjall\u00eb t\u00eb migrimit mund t\u00eb kontrollosh se si do t\u00eb funksionoj\u00eb n\u00eb makin\u00ebn e zhvilluesit dhe t\u00eb llogarit\u00ebsh pothuajse 100% problemet potenciale gjat\u00eb migrimit. <\/p>\n<p><\/p>\n<h3 id=\"6-obschaysya-s-drugimi-razrabotchikami-v-komande\">6. Komunikoni me zhvilluesit e tjer\u00eb n\u00eb ekip<\/h3>\n<p><\/p>\n<p>N\u00eb nj\u00eb proces t\u00eb organizuar mir\u00eb t\u00eb zhvillimit, t\u00eb gjith\u00eb n\u00eb ekip e din\u00eb se kush \u00ebsht\u00eb i angazhuar me \u00e7far\u00eb. N\u00eb realitet, shpesh nuk \u00ebsht\u00eb k\u00ebshtu, k\u00ebshtu q\u00eb, n\u00ebse n\u00eb kuad\u00ebr t\u00eb detyr\u00ebs tuaj po p\u00ebrgatisni ndryshime n\u00eb struktur\u00ebn e baz\u00ebs s\u00eb t\u00eb dh\u00ebnave, \u00ebsht\u00eb e d\u00ebshirueshme t\u00eb njoftoni p\u00ebr k\u00ebt\u00eb t\u00eb gjith\u00eb ekipin. N\u00ebse dikush b\u00ebn ndryshime paralelisht - duhet t\u00eb organizoheni me kujdes. \u00cbsht\u00eb mir\u00eb t\u00eb komunikoni me koleg\u00ebt dhe pas p\u00ebrfundimit t\u00eb pun\u00ebs, jo vet\u00ebm n\u00eb fillim. Shum\u00eb probleme potenciale me sets \u00e7\u00ebshtjesh 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 vet\u00ebkuptueshme, e aplikueshme n\u00eb \u00e7do situat\u00eb. Megjithat\u00eb, shum\u00eb probleme do t\u00eb kishin shp\u00ebtuar n\u00ebse zhvilluesi do t\u00eb kishte analizuar p\u00ebrs\u00ebri at\u00eb q\u00eb po b\u00ebn dhe se \u00e7far\u00eb mund t\u00eb ndikoj\u00eb. Puna me migrimet gjithmon\u00eb k\u00ebrkon v\u00ebmendje dhe kujdes shtes\u00eb. <\/p>\n<p><\/p>\n<h2 id=\"lovushki\">Rafting<\/h2>\n<p><\/p>\n<p>Le t\u00eb shqyrtojm\u00eb tani kurthe tipike, n\u00eb t\u00eb cilat mund t\u00eb bini n\u00ebse nuk ndiqni k\u00ebshillat e m\u00ebsip\u00ebrme, dhe \u00e7far\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 sets \u00e7\u00ebshtjesh t\u00eb reja nj\u00ebkoh\u00ebsisht<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si nuk t\u00eb l\u00ebndosh veten, duke p\u00ebrdorur Liquibase\" src=\"\/wp-content\/uploads\/2020\/02\/20706fc970510bc06634fa001a4c7ceb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVasja dhe Petja duan t\u00eb krijojn\u00eb setin \u00e7\u00ebshtjesh t\u00eb versionit 4, pa e ditur nj\u00ebri-tjetrin. Ata kan\u00eb b\u00ebr\u00eb ndryshime n\u00eb struktur\u00ebn e baz\u00ebs s\u00eb t\u00eb dh\u00ebnave dhe kan\u00eb paraqitur nj\u00eb k\u00ebrkes\u00eb p\u00ebr t\u00ebrheqje, me skedar\u00eb t\u00eb ndrysh\u00ebm t\u00eb sets \u00e7\u00ebshtjesh. M\u00eb pas propozohet mekanizmi i m\u00ebposht\u00ebm p\u00ebr veprim:<\/p>\n<p><\/p>\n<h4 id=\"kak-reshat\">Si t\u00eb zgjidhni<\/h4>\n<p><\/p>\n<ol>\n<li>Dhe n\u00eb nj\u00ebfar\u00eb m\u00ebnyre, koleg\u00ebt duhet t\u00eb bien dakord se n\u00eb cilin rend duhet t\u00eb shkojn\u00eb sets \u00e7\u00ebshtjesh t\u00eb tyre, p\u00ebr shembull, ai i Pet\u00ebs duhet t\u00eb aplikohet i pari. <\/li>\n<li>Nj\u00eb person duhet t\u00eb shtihet p\u00ebr t\u00eb derdhur t\u00eb dytin te vetja dhe t\u00eb sh\u00ebnoj\u00eb changset-in e Vasis me versionin 5. Kjo mund t\u00eb b\u00ebhet p\u00ebrmes Cherry Pick ose nj\u00eb merge t\u00eb p\u00ebrshtatsh\u00ebm. <\/li>\n<li>Pas ndryshimeve, \u00ebsht\u00eb thelb\u00ebsore t\u00eb kontrolloni vlefshm\u00ebrin\u00eb e veprimeve t\u00eb kryera.<br \/>\nN\u00eb t\u00eb v\u00ebrtet\u00eb, mekanizmat e Liquibase do t'ju lejojn\u00eb t\u00eb keni n\u00eb repository dy changset-e t\u00eb versionit 4, k\u00ebshtu q\u00eb mund ta lini gjith\u00e7ka si\u00e7 \u00ebsht\u00eb. K\u00ebshtu q\u00eb ju do t\u00eb keni dy ndryshime t\u00eb versionit 4 me emra t\u00eb ndrysh\u00ebm. Me k\u00ebt\u00eb qasje, b\u00ebhet shum\u00eb e v\u00ebshtir\u00eb t\u00eb orientoheni n\u00eb versionet e databaz\u00ebs n\u00eb t\u00eb ardhmen. <\/li>\n<\/ol>\n<p><\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, Liquibase, si sht\u00ebpia e hobit\u00ebve, ruan shum\u00eb sekrete. Nj\u00eb prej tyre \u00ebsht\u00eb \u00e7el\u00ebsi validCheckSum, i cili u shfaq me versionin 1.7 dhe lejon t\u00eb tregoni nj\u00eb vler\u00eb t\u00eb vlefshme hash p\u00ebr nj\u00eb changset t\u00eb caktuar, pavar\u00ebsisht nga ajo q\u00eb ruhet n\u00eb databaz\u00eb. Dokumentacioni <noindex><a rel=\"nofollow\" href=\"https:\/\/www.liquibase.org\/documentation\/changeset.html\">https:\/\/www.liquibase.org\/documentation\/changeset.html<\/a><\/noindex> thot\u00eb t\u00eb m\u00ebposhtme:<\/p>\n<p><\/p>\n<blockquote><p>Shtoni nj\u00eb kontroll t\u00eb b\u00ebhet i vlefsh\u00ebm p\u00ebr k\u00ebt\u00eb set ndryshimesh, pavar\u00ebsisht nga ato q\u00eb jan\u00eb ruajtur n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave. P\u00ebrdoret kryesisht kur duhet t\u00eb ndryshoni nj\u00eb set ndryshimesh dhe nuk d\u00ebshironi q\u00eb t\u00eb shfaqen gabime n\u00eb bazat e t\u00eb dh\u00ebnave ku tashm\u00eb \u00ebsht\u00eb ekzekutuar (nuk \u00ebsht\u00eb nj\u00eb procedur\u00eb e rekomanduar).<\/p><\/blockquote>\n<p>Po, nj\u00eb procedur\u00eb e till\u00eb nuk rekomandohet. Por ndonj\u00ebher\u00eb nj\u00eb magjistar i ndritur zot\u00ebron edhe teknikat e 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 nuk t\u00eb l\u00ebndosh veten, duke p\u00ebrdorur Liquibase\" src=\"\/wp-content\/uploads\/2020\/02\/31a6eebb55278c0631115bf16483c7b8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Supozoni se nuk keni mund\u00ebsi t\u00eb p\u00ebrdorni kopje rezerv\u00eb t\u00eb bazave nga server\u00ebt aktiv\u00eb. Petja krijoi changset-in, e kontrolloi lokalish dhe me nj\u00eb besim t\u00eb plot\u00eb n\u00eb t\u00eb drejt\u00ebn e tij b\u00ebri pull request n\u00eb zhvillim. Lideri i projektit p\u00ebr \u00e7do rast e sqaroi, kontrolloi n\u00ebse Petja e kishte verifikuar, dhe m\u00eb pas e derdhi. Por shp\u00ebrndarja n\u00eb serverin e zhvillimit u ndal.<\/p>\n<p><\/p>\n<p>N\u00eb fakt, kjo \u00ebsht\u00eb e mundur, dhe askush nuk \u00ebsht\u00eb i sigurt nga kjo. Kjo ndodh n\u00eb rastin 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-ja. \u00cbsht\u00eb e qart\u00eb se, n\u00ebse databaza e Pet\u00ebs \u00ebsht\u00eb mbushur vet\u00ebm me t\u00eb dh\u00ebna testuese, at\u00ebher\u00eb ajo nuk mund t\u00eb mbuloj\u00eb t\u00eb gjitha rastet problematike. P\u00ebr shembull, kur fshihet nj\u00eb tabel\u00eb, del se ka regjistrime n\u00eb tabela t\u00eb tjera p\u00ebrmes Foreign Key, t\u00eb lidhura me regjistrimet n\u00eb tabel\u00ebn e fshir\u00eb. Ose, kur ndodhet ndryshimi i tipit t\u00eb kolon\u00ebs, zbulohet se jo 100% e t\u00eb dh\u00ebnave mund t\u00eb konvertohen n\u00eb tipin 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 shkruani skripte speciale q\u00eb do t\u00eb aplikohen nj\u00eb her\u00eb s\u00eb bashku me migrimin dhe do t\u00eb sjellin t\u00eb dh\u00ebnat n\u00eb form\u00ebn e duhur. Ky \u00ebsht\u00eb nj\u00eb m\u00ebnyr\u00eb e p\u00ebrgjithshme p\u00ebr t\u00eb zgjidhur problemin e transferimit t\u00eb t\u00eb dh\u00ebnave n\u00eb struktura t\u00eb reja pas aplikimit t\u00eb migrimeve, por di\u00e7ka e ngjashme mund t\u00eb aplikohet edhe p\u00ebrpara, n\u00eb raste t\u00eb ve\u00e7anta. Kjo m\u00ebnyr\u00eb, sigurisht, nuk \u00ebsht\u00eb gjithmon\u00eb n\u00eb dispozicion, pasi redaktimi i t\u00eb dh\u00ebnave n\u00eb server\u00ebt aktiv mund t\u00eb jet\u00eb i rreziksh\u00ebm dhe madje shkat\u00ebrrues. <\/li>\n<li>Nj\u00eb tjet\u00ebr m\u00ebnyr\u00eb e komplikuar \u00ebsht\u00eb t\u00eb redaktoni changset ekzistuese. Kompleksiteti q\u00ebndron n\u00eb faktin se t\u00eb gjitha DB-t\u00eb, ku ai \u00ebsht\u00eb aplikuar n\u00eb form\u00ebn e tij ekzistuese, do t\u00eb duhet t\u00eb rikthehen. Mund t\u00eb ndodh\u00eb q\u00eb e gjith\u00eb ekipi i backend-it t\u00eb jet\u00eb i detyruar t\u00eb nis\u00eb lokalisht DB-n\u00eb nga zero. <\/li>\n<li>Dhe rruga m\u00eb universale \u00ebsht\u00eb t\u00eb transferoni problemin me t\u00eb dh\u00ebnat n\u00eb ambientin e zhvilluesit duke rigjeneruar t\u00eb nj\u00ebjt\u00ebn situat\u00eb dhe duke shtuar nj\u00eb changset t\u00eb ri, p\u00ebrpara atij t\u00eb prishur, i cili do t\u00eb lejoj\u00eb t\u00eb anashtrohet problemi.<br \/>\n<img decoding=\"async\" alt=\"Si nuk t\u00eb l\u00ebndosh veten, duke p\u00ebrdorur 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 q\u00eb baza e t\u00eb dh\u00ebnave t\u00eb ngjaj\u00eb me baz\u00ebn e serverit n\u00eb prodhim, aq m\u00eb pak shanse ka q\u00eb problemet me migrimet t\u00eb ndodhin n\u00eb thell\u00ebsi. Dhe, sigurisht, para se t\u00eb d\u00ebrgoni changset n\u00eb repositor, duhet t\u00eb mendoni disa her\u00eb n\u00ebse ai do t\u00eb thyej\u00eb di\u00e7ka. <\/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 iu k\u00ebrkoi Petrit t\u00eb lidhte Liquibase n\u00eb projekt, megjithat\u00eb projekti \u00ebsht\u00eb tashm\u00eb n\u00eb prodhim dhe ekziston nj\u00eb struktur\u00eb e baz\u00ebs s\u00eb dh\u00ebnave q\u00eb \u00ebsht\u00eb krijuar m\u00eb par\u00eb.<\/p>\n<p><\/p>\n<p>P\u00ebr pasoj\u00eb, problemi konsiston n\u00eb faktin se n\u00eb \u00e7do server t\u00eb ri ose makinat e zhvilluesve, t\u00eb dh\u00ebnat e k\u00ebtyre tabelave duhet t\u00eb rigjenerohen nga zero, dhe mjedisi ekzistues duhet t\u00eb mbetet n\u00eb nj\u00eb gjendje konsistente, duke qen\u00eb i gatsh\u00ebm t\u00eb pranoj\u00eb changset e 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 rrug\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>E para dhe m\u00eb e dukshme \u00ebsht\u00eb t\u00eb keni nj\u00eb skript t\u00eb ve\u00e7ant\u00eb, i cili duhet t\u00eb aplikohet manualisht gjat\u00eb inicializimit t\u00eb nj\u00eb ambienti t\u00eb ri. <\/li>\n<li>E dyta \u2014 m\u00eb pak e dukshme, t\u00eb keni nj\u00eb migrim Liquibase, i cili ndodhet n\u00eb nj\u00eb tjet\u00ebr Kontekst Liquibase, dhe ta aplikoni at\u00eb. M\u00eb shum\u00eb rreth Kontekstit t\u00eb Liquibase mund t\u00eb lexoni 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, ky \u00ebsht\u00eb nj\u00eb mekaniz\u00ebm interesante, i cili mund t\u00eb aplikohet me sukses, p\u00ebr shembull, p\u00ebr testim. <\/li>\n<li>Rruga e tret\u00eb p\u00ebrb\u00ebhet nga disa hapa. Fillimisht, duhet t\u00eb krijohet nj\u00eb migrim p\u00ebr tabelat ekzistuese. M\u00eb pas, ajo duhet t\u00eb aplikohet n\u00eb nj\u00eb ambient dhe k\u00ebshtu do t\u00eb merret hash-suma e saj. Hapi i ardhsh\u00ebm \u00ebsht\u00eb t\u00eb inicializoni n\u00eb serverin ton\u00eb jo t\u00eb zbraz\u00ebt tabelat e zbraz\u00ebta t\u00eb Liquibase, dhe n\u00eb tabel\u00ebn me historin\u00eb e zbatimit t\u00eb set\u00ebve t\u00eb ndryshimeve, mund t\u00eb vendosni manualisht nj\u00eb regjist\u00ebr p\u00ebr nj\u00eb set ndryshimesh \"si\u00e7 do t\u00eb ishte aplikuar\" me ndryshimet q\u00eb tashm\u00eb ekzistojn\u00eb n\u00eb baz\u00eb. K\u00ebshtu, n\u00eb serverin ekzistues, 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 nuk t\u00eb l\u00ebndosh veten, duke p\u00ebrdorur 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. Migrimet b\u00ebhen t\u00eb m\u00ebdha dhe nuk p\u00ebrfundojn\u00eb n\u00eb koh\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 ekstern, dhe t\u00eb gjitha migrimet trajtohen gjat\u00eb startimit t\u00eb aplikacionit. Megjithat\u00eb, me kalimin e koh\u00ebs mund t\u00eb p\u00ebrballeni me rastet e \u00e7ift\u00ebzuara:<\/p>\n<p><\/p>\n<ul>\n<li>Migrimet b\u00ebhen t\u00eb m\u00ebdha dhe zgjatin p\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb.<\/li>\n<li>Ndjehet nevoja p\u00ebr migrim n\u00eb ambiente t\u00eb shp\u00ebrndara, le t\u00eb themi, n\u00eb disa instancat e server\u00ebve t\u00eb DB nj\u00ebkoh\u00ebsisht.<br \/>\nN\u00eb nj\u00eb rast t\u00eb till\u00eb, zbatimi i gjat\u00eb i migrimeve do t\u00eb \u00e7oj\u00eb n\u00eb skadimin e koh\u00ebs gjat\u00eb startimit t\u00eb aplikacionit. P\u00ebr m\u00eb tep\u00ebr, zbatimi i migrimeve p\u00ebr \u00e7do instanc\u00eb t\u00eb aplikacionit ve\u00e7mas mund t\u00eb \u00e7oj\u00eb n\u00eb situata ku server\u00ebt e ndrysh\u00ebm jan\u00eb n\u00eb nj\u00eb gjendje jo sinkron. <\/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 madje i rritur, dhe Liquibase fillon t\u00eb veproj\u00eb si nj\u00eb mjet i ve\u00e7ant\u00eb dhe i jasht\u00ebm. E v\u00ebrteta \u00ebsht\u00eb se Liquibase si bibliotek\u00eb paketizohet n\u00eb nj\u00eb skedar jar, dhe mund t\u00eb funksionoj\u00eb si nj\u00eb var\u00ebsi brenda projektit, si edhe n\u00eb m\u00ebnyr\u00eb autonome. <\/p>\n<p><\/p>\n<p>N\u00eb nj\u00eb modalitet autonom, mund t\u00eb ngarkohet zbatimi i migrimeve n\u00eb ambientin tuaj CI\/CD ose n\u00eb supet e forta t\u00eb administrator\u00ebve t\u00eb sistemeve tuaj specialist\u00eb p\u00ebr shp\u00ebrndarjen. P\u00ebr k\u00ebt\u00eb do t\u00eb nevojitet komanda e linj\u00ebs s\u00eb komandave t\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 nj\u00eb modalitet t\u00eb till\u00eb, krijohet mund\u00ebsia p\u00ebr t\u00eb nisur aplikacionin vet\u00ebm pasi t\u00eb jen\u00eb kryer t\u00eb gjitha migrimet e nevojshme.<\/p>\n<p><\/p>\n<h2 id=\"vyvod\">P\u00ebrfundimi<\/h2>\n<p><\/p>\n<p>N\u00eb t\u00eb v\u00ebrtet\u00eb, ka shum\u00eb m\u00eb tep\u00ebr kap\u00ebse kur punoni me migrrimet e DB, dhe shum\u00eb prej tyre k\u00ebrkojn\u00eb nj\u00eb qasje kreative. \u00cbsht\u00eb e r\u00ebnd\u00ebsishme t\u00eb kuptoni se n\u00ebse p\u00ebrdorni instrumentin si\u00e7 duhet, shumica e k\u00ebtyre kap\u00ebseve do t\u00eb mund t'i shmangni. Konkretisht, un\u00eb kam hasur n\u00eb t\u00eb gjitha k\u00ebto probleme n\u00eb forma t\u00eb ndryshme, dhe disa prej tyre kan\u00eb qen\u00eb rezultat i gabimeve t\u00eb mia. Kryesisht ndodhin p\u00ebr shkak t\u00eb munges\u00ebs s\u00eb v\u00ebmendjes, por ndonj\u00ebher\u00eb p\u00ebr shkak t\u00eb paaft\u00ebsis\u00eb kriminale p\u00ebr t\u00eb p\u00ebrdorur instrumentin.<\/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 5.0.2 - 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\/sq\/blog\/administrirovanie\/kak-ne-vystrelit-sebe-v-nogu-ispolzuya-liquibase\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\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.\" \/>\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 kishte ndodhur, dhe ja p\u00ebrs\u00ebri! N\u00eb projektin e radh\u00ebs vendos\u00ebm t\u00eb p\u00ebrdorim Liquibase nga fillimi p\u00ebr t\u00eb shmangur probleme n\u00eb t\u00eb ardhmen.","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.","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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"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}]}}