Lojika raharaham-barotra amin'ny angon-drakitra mampiasa SchemaKeeper

Ny tanjon'ity lahatsoratra ity dia ny hampiasa ny ohatra momba ny tranomboky schema- keeper Asehoy ireo fitaovana afaka manatsotra tanteraka ny fizotran'ny fampivoarana angona ao anatin'ny tetikasa PHP mampiasa ny PostgreSQL DBMS.

Ny fampahalalam-baovao avy amin'ity lahatsoratra ity dia, voalohany indrindra, dia mahasoa ho an'ireo mpamorona izay te-hanararaotra ny fahaiza-manaon'ny PostgreSQL, saingy miatrika olana amin'ny fitazonana ny lojikan'ny orinasa napetraka ao amin'ny tahiry.

Ity lahatsoratra ity dia tsy hamaritra ny tombony na ny fatiantoka amin'ny fitehirizana ny lojikan'ny fandraharahana ao anaty tahiry. Heverina fa ny safidy dia efa nataon'ny mpamaky.

Hodinihina ireto fanontaniana manaraka ireto:

  1. Amin'ny endrika inona no tokony hotehirizina ao anaty rafitra fanaraha-maso ny dikan-teny (antsoina hoe VCS)
  2. Ahoana no hanaraha-maso ny fiovana ao amin'ny rafitry ny angon-drakitra taorian'ny nitahiry fanariam-pako
  3. Ahoana ny famindrana ny fanovana ao amin'ny rafitry ny angon-drakitra mankany amin'ny tontolo hafa tsy misy fifandirana sy rakitra fifindra-monina goavana
  4. Ahoana ny fandrindrana ny fizotran'ny asa mifanitsy amin'ny tetikasa iray ataon'ny mpamorona maromaro
  5. Ahoana ny fametrahana soa aman-tsara fiovana bebe kokoa amin'ny firafitry ny angon-drakitra amin'ny tontolo famokarana

    SchemaKeeper natao hiasa amin'ny fomba fiasa voatahiry voasoratra amin'ny fiteny PL/pgSQL. Ny fitsapana amin'ny fiteny hafa dia tsy natao, ka ny fampiasana dia mety tsy mahomby na mety tsy ho azo atao.

Ahoana ny fomba fitehirizana fanariam-pamokarana database ao amin'ny VCS

fitehirizam-boky schema- keeper manome asa saveDump, izay mitahiry ny firafitry ny zavatra rehetra avy amin'ny angon-drakitra ho rakitra lahatsoratra misaraka. Ny vokatra dia lahatahiry misy ny firafitry ny angon-drakitra, mizara ho rakitra mivondrona izay azo ampidirina mora amin'ny VCS.

Andeha hojerentsika ny famadihana zavatra avy amin'ny angon-drakitra ho rakitra mampiasa ohatra maromaro:

Karazana zavatra
Ny tetika
anarana
Lalana mifandraika amin'ny rakitra

table
-bahoaka
kaonty
./public/tables/accounts.txt

Fitsipika voatahiry
-bahoaka
auth (hash bigint)
./public/functions/auth(int8).sql

hevitra
famandrihana
tariffs
./booking/views/tariffs.txt

Ny votoatin'ny rakitra dia fanehoana an-tsoratra ny firafitry ny zavatra angon-drakitra manokana. Ohatra, ho an'ny fomba fiasa voatahiry, ny votoatin'ny rakitra dia ny famaritana feno ny fomba fiasa voatahiry, manomboka amin'ny sakana CREATE OR REPLACE FUNCTION.

Araka ny hita amin'ny tabilao etsy ambony, ny lalana mankany amin'ny rakitra dia mitahiry fampahalalana momba ny karazana, skema ary anaran'ilay zavatra. Ity fomba fiasa ity dia manamora ny fandehanana amin'ny famerenan'ny dump sy ny kaody fanovana ao amin'ny angon-drakitra.

fanitarana .sql ho an'ny rakitra miaraka amin'ny code source procΓ©dure voatahiry, dia nofantenana izany mba hanomezana fitaovana ho azy ny IDE hifaneraserana amin'ny angon-drakitra rehefa misokatra ny rakitra.

Ahoana no hanaraha-maso ny fiovana ao amin'ny rafitry ny angon-drakitra taorian'ny nitahiry fanariam-pako

Amin'ny alΓ lan'ny fitehirizana fanariam-pamokarana amin'izao fotoana izao ao amin'ny VCS, dia mahazo fahafahana hanamarina raha nisy fiovana natao tamin'ny rafitry ny angona taorian'ny namoronana ny fanariam-pako. Ao amin'ny tranomboky schema- keeper mba hamantarana ny fiovana ao amin'ny rafitry ny angon-drakitra dia misy asa omena verifyDump, izay mamerina vaovao momba ny fahasamihafana tsy misy fiantraikany.

Ny fomba hafa hanamarinana dia ny fiantsoana indray ny asa saveDump, mamaritra ny lahatahiry iray ihany, ary jereo ao amin'ny VCS raha misy fiovana. Satria ny zavatra rehetra avy amin'ny angon-drakitra dia voatahiry ao anaty rakitra misaraka, ny VCS dia tsy hampiseho afa-tsy zavatra niova.
Ny tena fatiantoka amin'ity fomba ity dia ny filΓ na overwrite ny rakitra mba hahitana ny fiovana.

Ahoana ny famindrana ny fanovana ao amin'ny rafitry ny angon-drakitra mankany amin'ny tontolo hafa tsy misy fifandirana sy rakitra fifindra-monina goavana

Misaotra ny asa deployDump Ny kaody loharanon'ny fomba fiasa voatahiry dia azo ovaina mitovy tanteraka amin'ny kaody loharanon'ny fampiharana mahazatra. Azonao atao ny manampy/mamafa andalana vaovao ao amin'ny code procΓ©dure voatahiry ary manosika avy hatrany ny fanovana amin'ny fanaraha-maso ny dikan-teny, na mamorona/mamafa fomba voatahiry amin'ny alalan'ny famoronana/famafana ireo rakitra mifanaraka amin'izany ao amin'ny lahatahiry fanariam-pako.

Ohatra, hamorona fomba fiasa voatahiry vaovao amin'ny schema public mamorona rakitra vaovao miaraka amin'ny fanitarana fotsiny .sql ao amin'ny lahatahiry public/functions, apetraho ao anatiny ny kaody loharanon'ny fomba fiasa voatahiry, ao anatin'izany ny sakana CREATE OR REPLACE FUNCTION, dia antsoy ny asa deployDump. Toy izany koa ny fanovana sy famafana fomba fiasa voatahiry. Noho izany, ny kaody dia miditra ao amin'ny VCS sy ny angon-drakitra amin'ny fotoana iray ihany.

Raha misy hadisoana miseho ao amin'ny kaody loharanon'ny fomba fiasa voatahiry, na ny tsy fitovian'ny anaran'ny rakitra sy ny fomba fiasa voatahiry, dia deployDump tsy hahomby, mampiseho lahatsoratra diso. Ny tsy fitovian'ny fomba fiasa voatahiry eo anelanelan'ny fanariam-pako sy ny angona ankehitriny dia tsy azo atao rehefa mampiasa deployDump.

Rehefa mamorona fomba fiasa voatahiry vaovao dia tsy ilaina ny mampiditra ny anaran-drakitra marina. Ampy ho an'ny rakitra ny fanitarana .sql. Taorian'ny antso deployDump ny lahatsoratra diso dia ahitana ny anarana marina, izay azo ampiasaina hanovana anarana ny rakitra.

deployDump mamela anao hanova ny mason'ny fiasa na karazana fiverenana tsy misy hetsika fanampiny, raha miaraka amin'ny fomba fanao mahazatra dia tsy maintsy
tanteraho aloha DROP FUNCTION, ary avy eo ihany CREATE OR REPLACE FUNCTION.

Indrisy anefa fa misy toe-javatra sasany izay deployDump tsy afaka mampihatra ho azy ny fanovana. Ohatra, raha esorina ny fiasan'ny trigger izay ampiasain'ny trigger iray farafahakeliny. Ny toe-javatra toy izany dia voavaha amin'ny tanana amin'ny fampiasana rakitra fifindra-monina.

Raha tompon'andraikitra amin'ny fifindran'ny fanovana amin'ny fomba voatahiry ianao schema- keeper, dia tsy maintsy ampiasaina ny rakitra fifindra-monina mba hamindrana fiovana hafa amin'ny rafitra. Ohatra, tranomboky tsara hiasa amin'ny fifindra-monina dia fotopampianarana/fifindra-monina.

Ny fifindra-monina dia tsy maintsy ampiharina alohan'ny fandefasana deployDump. Izany dia ahafahanao manao fanovana rehetra amin'ny rafitra ary mamaha ny toe-javatra misy olana mba hafindra tsy misy olana ny fanovana amin'ny fomba voatahiry.

Ny fiasana amin'ny fifindra-monina dia holazaina amin'ny antsipiriany kokoa ao amin'ny fizarana manaraka.

Ahoana ny fandrindrana ny fizotran'ny asa mifanitsy amin'ny tetikasa iray ataon'ny mpamorona maromaro

Ilaina ny mamorona script ho an'ny fanombohana tanteraka ny angon-drakitra, izay havoakan'ny mpamorona amin'ny milina fiasana, mitondra ny firafitry ny angona eo an-toerana mifanaraka amin'ny fanariam-pako voatahiry ao amin'ny VCS. Ny fomba tsotra indrindra dia ny fizarana ny fanombohana ny angona eo an-toerana ho dingana 3:

  1. Manafatra rakitra misy rafitra fototra izay hantsoina oh. base.sql
  2. Fampiharana ny fifindra-monina
  3. antso deployDump

base.sql dia ny fiaingana eo an-tampon'ny fifindra-monina ampiharina sy tanterahina deployDump, izany dia base.sql + ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ + deployDump = Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ структура Π‘Π”. Azonao atao ny mamorona rakitra toy izany amin'ny fampiasana ny utility pg_dump. NAMPIASAINA base.sql rehefa manomboka ny angon-drakitra hatrany am-boalohany.

Andao hiantso ny script ho an'ny fanombohana angona feno refresh.sh. Mety ho toy izao ny fizotran'ny asa:

  1. Ny mpamorona dia manomboka amin'ny tontolo manodidina azy refresh.sh ary mahazo ny rafitra angon-drakitra ankehitriny
  2. Ny mpamorona dia manomboka miasa amin'ny asa eo am-pelatanana, manova ny angon-drakitra eo an-toerana mba hanomezana ny filan'ny fiasa vaovao (ALTER TABLE ... ADD COLUMN sns)
  3. Rehefa vita ny asa dia miantso ny asa ny developer saveDumphanao fanovana natao tamin'ny angon-drakitra ao amin'ny VCS
  4. Famerenana ny developer refresh.sh, then verifyDumpizay mampiseho lisitr'ireo fanovana hampidirina ao amin'ny fifindra-monina
  5. Ny mpandrindra dia mamindra ny fanovana rafitra rehetra amin'ny rakitra fifindra-monina, mandeha indray refresh.sh ΠΈ verifyDump, ary, raha natambatra tsara ny fifindra-monina, verifyDump dia tsy hampiseho fahasamihafana eo amin'ny angon-drakitra eo an-toerana sy ny fanariam-pako voatahiry

Ny dingana voalaza etsy ambony dia mifanaraka amin'ny fitsipiky ny gitflow. Ny sampana tsirairay ao amin'ny VCS dia ahitana ny dikan-ny fanariam-pako, ary rehefa manambatra ny sampana dia hatambatra ireo fanariam-pako. Amin'ny ankabeazan'ny toe-javatra, tsy misy hetsika fanampiny tokony hatao aorian'ny fampifangaroana, fa raha misy fanovana natao tamin'ny sampana samihafa, ohatra, amin'ny latabatra iray, dia mety hisy fifandirana.

Andeha isika handinika toe-javatra misy fifandirana amin'ny fampiasana ohatra iray: misy sampana hampivelarana, izay misy sampany roa: endri-javatra1 ΠΈ endri-javatra2, izay tsy misy fifanoherana amin'ny hampivelarana, fa misy fifandirana. Ny asa dia ny manambatra ny sampana roa hampivelarana. Amin'ity tranga ity, soso-kevitra ny hanambatra ny iray amin'ireo sampana voalohany hampivelaranaary avy eo mitambatra hampivelarana mankany amin'ny sampana sisa, mamaha ny fifandirana ao amin'ny sampana sisa, ary avy eo manambatra ny sampana farany hampivelarana. Mandritra ny dingana famahana ny fifandirana dia mety tsy maintsy amboarinao ny rakitra fifindra-monina ao amin'ny sampana farany mba hifanaraka amin'ny fanariam-pako farany, izay ahitana ny vokatry ny fitambarana.

Ahoana ny fametrahana soa aman-tsara fiovana bebe kokoa amin'ny firafitry ny angon-drakitra amin'ny tontolo famokarana

Noho ny fisian'ny fanariam-pako ny rafitra angon-drakitra amin'izao fotoana izao ao amin'ny VCS, dia azo atao ny manamarina ny angon-drakitra famokarana ho an'ny fanarahana marina ny rafitra ilaina. Izany dia miantoka fa ny fanovana rehetra nokasain'ny mpamorona dia nafindra soa aman-tsara tany amin'ny toby famokarana.

satria DDL ao amin'ny PostgreSQL dia transactional, soso-kevitra ny hanaraka ity baiko fandefasana manaraka ity, mba hahafahanao manatanteraka "tsy misy fanaintainana" raha sendra misy hadisoana tsy ampoizina. ROLLBACK:

  1. Atombohy ny fifampiraharahana
  2. Ataovy ny fifindra-monina rehetra amin'ny fifampiraharahana
  3. Amin'ny fifampiraharahana mitovy, manatanteraka deployDump
  4. Raha tsy vita ny fifampiraharahana dia tanteraho verifyDump. Raha tsy misy hadisoana dia mihazakazaka COMMIT. Raha misy hadisoana dia mihazakazaka ROLLBACK

Ireo dingana ireo dia azo ampidirina mora amin'ny fomba efa misy amin'ny fametrahana fampiharana, ao anatin'izany ny zero-downtime.

famaranana

Noho ireo fomba voalaza etsy ambony dia azo atao ny manindry ny fampisehoana ambony indrindra amin'ny tetikasa "PHP + PostgreSQL", raha manao sorona kely ny fampivoarana raha oharina amin'ny fampiharana ny lojikan'ny orinasa rehetra ao amin'ny fehezan-dalΓ na fampiharana. Ankoatra izany, ny fanodinana data amin'ny PL/pgSQL matetika dia toa mangarahara kokoa ary mitaky kaody kely kokoa noho ny fiasa mitovy voasoratra amin'ny PHP.

Source: www.habr.com

Add a comment