Maikutlo a khoebo sebakeng sa polokelo ea litaba le SchemaKeeper

Sepheo sa sengoloa sena ke ho sebelisa mohlala oa laebrari mohlokomeli oa leano bonts'a lisebelisoa tse ka nolofatsang haholo ts'ebetso ea ho theha datha ka har'a merero ea PHP ka ho sebelisa PostgreSQL DBMS.

Tlhahisoleseding e hlahang sehloohong sena, pele ho tsohle, e tla ba molemo ho bahlahisi ba batlang ho sebelisa bokhoni ba PostgreSQL ka botlalo, empa ba tobane le mathata a ho boloka mohopolo oa khoebo o behiloeng polokelong ea litaba.

Sengoliloeng sena se ke ke sa hlalosa melemo kapa mathata a ho boloka mohopolo oa khoebo sebakeng sa polokelo ea litaba. Ho nahanoa hore khetho e se e entsoe ke 'mali.

Ho tla hlahlojoa lipotso tse latelang:

  1. Sebaka sa polokelo ea boitsebiso se lokela ho bolokoa ka mokhoa ofe tsamaisong ea taolo ea phetolelo (eo ka mor'a moo e bitsoang VCS)
  2. Mokhoa oa ho latela liphetoho tsa sebopeho sa database ka mor'a ho boloka thotobolo
  3. Mokhoa oa ho fetisetsa liphetoho ho sebopeho sa database ho ea libakeng tse ling ntle le likhohlano le lifaele tse kholo tsa ho falla
  4. Mokhoa oa ho hlophisa ts'ebetso ea ts'ebetso e ts'oanang ho projeke ke bahlahisi ba 'maloa
  5. Mokhoa oa ho kenya ka mokhoa o sireletsehileng liphetoho tse ling tsa sebopeho sa database sebakeng sa tlhahiso

    SchemaKeeper e etselitsoeng ho sebetsa ka mekhoa e bolokiloeng e ngotsoeng ka puo PL/pgSQL. Teko ka lipuo tse ling ha e so etsoe, ka hona ts'ebeliso e kanna ea se sebetse kapa ea se khonehe.

Mokhoa oa ho boloka thotobolo ea sebopeho sa database ho VCS

laebrari mohlokomeli oa leano e fana ka tshebetso saveDump, e bolokang sebopeho sa lintho tsohle ho tsoa ho database e le lifaele tsa mongolo tse arohaneng. Se hlahisoang ke bukana e nang le sebopeho sa database, e arotsoe ka lifaele tse arotsoeng tse ka kenyelletsoang habonolo ho VCS.

Ha re shebeng ho fetolela lintho ho tloha polokelong ea litaba hore e be lifaele ka mehlala e mengata:

Mofuta oa ntho
Scheme
Sehlooho
Tsela e amanang le faele

tafole
setjhaba
litlaleho
./public/tables/accounts.txt

Mokhoa o bolokiloeng
setjhaba
auth (hash bigint)
./public/functions/auth(int8).sql

Selelekela
Booking
litefiso
./booking/views/tariffs.txt

Likahare tsa lifaele ke setšoantšo sa mongolo sa sebopeho sa ntho e itseng ea database. Ka mohlala, bakeng sa mekhoa e bolokiloeng, likahare tsa faele e tla ba tlhaloso e feletseng ea mokhoa o bolokiloeng, ho qala ka thibela CREATE OR REPLACE FUNCTION.

Joalokaha ho ka bonoa tafoleng e kaholimo, tsela e eang faeleng e boloka tlhahisoleseling mabapi le mofuta, schema le lebitso la ntho. Mokhoa ona o etsa hore ho be bonolo ho tsamaea ka har'a thotobolo le tlhahlobo ea khoutu ea liphetoho ho database.

katoloso .sql bakeng sa lifaele tse nang le khoutu ea mohloli o bolokiloeng, sena se khethiloe e le hore IDE e fane ka lisebelisoa tsa ho sebelisana le database ha faele e buloa.

Mokhoa oa ho latela liphetoho tsa sebopeho sa database ka mor'a ho boloka thotobolo

Ka ho boloka thotobolo ea sebopeho sa hona joale sa polokelo ea litaba ho VCS, re fumana monyetla oa ho lekola hore na ho entsoe liphetoho ho sebopeho sa polokelo ea polokelo ka mor'a hore thotobolo e thehoe. Laebraring mohlokomeli oa leano ho bona liphetoho tse teng sebopehong sa database, ho fanoe ka mosebetsi verifyDump, e khutlisetsang tlhahisoleseding mabapi le phapang ntle le litla-morao.

Mokhoa o mong oa ho hlahloba ke ho letsetsa tšebetso hape saveDump, ho hlakisa bukana e tšoanang, 'me u hlahlobe VCS bakeng sa liphetoho. Kaha lintho tsohle tse tsoang ho database li bolokiloe ka lifaele tse arohaneng, VCS e tla bontša feela lintho tse fetotsoeng.
Bothata bo ka sehloohong ba mokhoa ona ke tlhokahalo ea ho ngola lifaele ka holimo e le hore u bone liphetoho.

Mokhoa oa ho fetisetsa liphetoho ho sebopeho sa database ho ea libakeng tse ling ntle le likhohlano le lifaele tse kholo tsa ho falla

Ke leboha mosebetsi deployDump Khoutu ea mohloli oa mekhoa e bolokiloeng e ka hlophisoa ka mokhoa o ts'oanang hantle le khoutu e tloaelehileng ea mohloli oa kopo. O ka eketsa / hlakola mela e mecha ka har'a khoutu ea ts'ebetso e bolokiloeng mme hang-hang o sutumelletsa liphetoho ho taolo ea mofuta, kapa oa theha / hlakola lits'ebetso tse bolokiloeng ka ho theha / ho hlakola lifaele tse tsamaellanang bukeng ea ho lahla.

Mohlala, ho theha ts'ebetso e ncha e bolokiloeng ho schema public etsa feela faele e ncha ka katoloso .sql bukeng public/functions, beha khoutu ea mohloli oa mokhoa o bolokiloeng ho eona, ho kenyelletsa le thibela CREATE OR REPLACE FUNCTION, ebe o letsetsa tshebetso deployDump. Ho fetola le ho hlakola mokhoa o bolokiloeng ho etsahala ka tsela e ts'oanang. Kahoo, khoutu e kena ho VCS le database ka nako e le 'ngoe.

Haeba phoso e hlaha khoutu ea mohloli oa ts'ebetso leha e le efe e bolokiloeng, kapa ho se lumellane pakeng tsa mabitso a faele le mokhoa o bolokiloeng, joale deployDump e tla hloleha, e bonts'a mongolo oa phoso. Phapang ea lits'ebetso tse bolokiloeng lipakeng tsa thotobolo le database ea hajoale ha ho khonehe ha o sebelisoa deployDump.

Ha u theha mokhoa o mocha o bolokiloeng, ha ho hlokahale hore u kenye lebitso le nepahetseng la faele ka letsoho. Ho lekane hore faele e be le katoloso .sql. Kamora mohala deployDump mongolo oa phoso o tla ba le lebitso le nepahetseng, le ka sebelisoang ho reha faele.

deployDump e o lumella ho fetola liparamente tsa ts'ebetso kapa mofuta oa ho khutla ntle le liketso tse ling, ha ka mokhoa oa khale o tla tlameha ho etsa joalo.
phethisa pele DROP FUNCTION, mme ka nako eo feela CREATE OR REPLACE FUNCTION.

Ka bomalimabe, ho na le maemo a mang moo deployDump ha e khone ho etsa liphetoho ka bo eona. Ka mohlala, haeba ts'ebetso ea trigger e sebelisoang ke bonyane e le 'ngoe e tlosoa. Maemo a joalo a rarolloa ka letsoho ho sebelisa lifaele tsa ho falla.

Haeba u na le boikarabelo ba ho falla liphetoho mekhoeng e bolokiloeng mohlokomeli oa leano, joale lifaele tsa ho falla li tlameha ho sebelisoa ho fetisetsa liphetoho tse ling mohahong. Ka mohlala, laebrari e ntle ea ho sebetsa le bafalli ke thuto/ho falla.

Ho fallisoa ho tlameha ho sebelisoa pele ho qala deployDump. Sena se o lumella ho etsa liphetoho tsohle sebopehong le ho rarolla maemo a mathata e le hore liphetoho lits'ebetsong tse bolokiloeng li fetisetsoe ntle le mathata.

Ho sebetsa le bafalli ho tla hlalosoa ka botlalo likarolong tse latelang.

Mokhoa oa ho hlophisa ts'ebetso ea ts'ebetso e ts'oanang ho projeke ke bahlahisi ba 'maloa

Hoa hlokahala ho theha script bakeng sa ho qalisoa ka ho feletseng ha database, e tla qalisoa ke moqapi mochineng oa hae oa mosebetsi, ho tlisa sebopeho sa database ea sebaka seo ho latela ho lahlela ho bolokiloeng VCS. Tsela e bonolo ka ho fetisisa ke ho arola ho qala ha database ea lehae ka mehato e 3:

  1. Kenya faele e nang le sebopeho sa motheo se tla bitsoa e.g. base.sql
  2. Ho Sebelisa Phalliso
  3. Bothata deployDump

base.sql ke sebaka sa ho qala ka holim'a sona ho fallisoa ho sebelisoa le ho etsoa deployDump, ke hore base.sql + миграции + deployDump = актуальная структура БД. U ka etsa faele e joalo u sebelisa sesebelisoa pg_dump. Se sebedisoang base.sql ka ho khetheha ha o qala database ho tloha qalong.

Ha re letsetse sengoloa bakeng sa ho qala database ka botlalo refresh.sh. Mokhoa oa ts'ebetso o ka shebahala tjena:

  1. Moqapi o qala tikolohong ea hae refresh.sh mme e fumana sebopeho sa hajoale sa database
  2. Moqapi o qala ho sebetsa mosebetsing o teng, ho fetola database ea lehae ho fihlela litlhoko tsa ts'ebetso e ncha (ALTER TABLE ... ADD COLUMN joalo-joalo)
  3. Ka mor'a ho qeta mosebetsi, moqapi o letsetsa mosebetsi saveDumpho etsa liphetoho tse entsoeng polokelong ea VCS
  4. Ho qala bocha refresh.shjoale verifyDumpeo hona joale e bonts'ang lethathamo la liphetoho tse lokelang ho kenyelletsoa ho falla
  5. Moqapi o fetisetsa liphetoho tsohle tsa sebopeho ho faele ea ho falla, e sebetsa hape refresh.sh и verifyDump, 'me, haeba ho falla ho hlophisitsoe hantle, verifyDump e ke ke ea bonts'a phapang lipakeng tsa database ea lehae le thotobolo e bolokiloeng

Mokhoa o hlalositsoeng ka holimo o lumellana le melao-motheo ea gitflow. Lekala le leng le le leng la VCS le tla ba le mofuta oa lona oa thotobolo, 'me ha ho kopanya makala, lithōle li tla kopanngoa. Maemong a mangata, ha ho na khato e eketsehileng e lokelang ho nkoa ka mor'a ho kopanya, empa haeba liphetoho li entsoe makaleng a fapaneng, mohlala, tafoleng e le 'ngoe, ho ka hlaha khohlano.

Ha re nahaneng ka boemo ba likhohlano re sebelisa mohlala: ho na le lekala Ntshetsa pele, moo makala a mabeli a tsoang ho 'ona: likarolo1 и likarolo2, tse se nang likhohlano le Ntshetsa pele, empa le be le likhohlano. Mosebetsi ke ho kopanya makala ka bobeli Ntshetsa pele. Tabeng ena, ho kgothaletswa ho qala ho kopanya e 'ngoe ea makala ho Ntshetsa peleebe o kopanya Ntshetsa pele lekaleng le setseng, ho rarolla likhohlano lekaleng le setseng, ebe ho kopanya lekala la ho qetela ho Ntshetsa pele. Nakong ea mohato oa ho rarolla likhohlano, u ka 'na ua tlameha ho lokisa faele ea ho falla lekaleng la ho qetela e le hore e lumellane le thotobolo ea ho qetela, e kenyeletsang liphetho tsa ho kopanya.

Mokhoa oa ho kenya ka mokhoa o sireletsehileng liphetoho tse ling tsa sebopeho sa database sebakeng sa tlhahiso

Ka lebaka la ho ba teng ha sebaka sa polokelo ea boitsebiso ho VCS, hoa khoneha ho hlahloba polokelo ea lihlahisoa bakeng sa ho lumellana hantle le sebopeho se hlokahalang. Sena se tiisa hore liphetoho tsohle tseo bahlahisi ba li rerileng li fetiselitsoe ka katleho setsing sa tlhahiso.

ho tloha ka DDL ho PostgreSQL ke kgwebisano, ho kgothaletswa ho khomarela taelo e latelang ea ho romelloa, e le hore, haeba ho e-na le phoso e sa lebelloang, u ka khona ho etsa "ntle le bohloko" ROLLBACK:

  1. Qala transaction
  2. Etsa liphalliso tsohle ka khoaso
  3. Ka mokhoa o ts'oanang, phethisa deployDump
  4. Ntle le ho qeta transaction, phethisa verifyDump. Haeba ho se na liphoso, matha COMMIT. Haeba ho na le liphoso, matha ROLLBACK

Mehato ena e ka kopanngoa habonolo mekhoeng e teng ea ho kenya kopo, ho kenyelletsa le nako ea ho theoha.

fihlela qeto e

Ka lebaka la mekhoa e hlalositsoeng ka holimo, hoa khoneha ho pepesa ts'ebetso e kholo ho tsoa mererong ea "PHP + PostgreSQL", ha u ntse u tela boiketlo bo fokolang ba nts'etsopele ha bo bapisoa le ho kenya ts'ebetsong mabaka ohle a khoebo ho khoutu e kholo ea kopo. Ho feta moo, ts'ebetso ea data ka har'a PL/pgSQL hangata e shebahala e le pepeneneng mme e hloka khoutu e nyane ho feta ts'ebetso e tšoanang e ngotsoeng ho PHP.

Source: www.habr.com

Eketsa ka tlhaloso