Kev lag luam logic hauv cov ntaub ntawv siv SchemaKeeper

Lub hom phiaj ntawm tsab xov xwm no yog siv cov piv txwv ntawm lub tsev qiv ntawv schema-keeper qhia cov cuab yeej uas tuaj yeem ua kom yooj yim rau cov txheej txheem ntawm kev tsim cov databases hauv PHP tej yaam num siv PostgreSQL DBMS.

Cov ntaub ntawv los ntawm tsab xov xwm no yuav, ua ntej ntawm tag nrho cov, yuav muaj txiaj ntsig zoo rau cov neeg tsim khoom uas xav ua kom muaj peev xwm tshaj plaws ntawm PostgreSQL, tab sis ntsib teeb meem tswj kev lag luam logic tso rau hauv cov ntaub ntawv.

Kab lus no yuav tsis piav txog qhov zoo lossis qhov tsis zoo ntawm kev khaws cia kev lag luam logic hauv cov ntaub ntawv. Nws yog xav tias qhov kev xaiv twb tau ua los ntawm tus nyeem ntawv.

Cov lus nug hauv qab no yuav raug txiav txim siab:

  1. Nyob rau hauv dab tsi daim ntawv yuav tsum tau ib tug database cov ntaub ntawv pov tseg nyob rau hauv ib tug version tswj system (tom qab no hu ua VCS)
  2. Yuav ua li cas taug qab cov kev hloov pauv hauv cov qauv database tom qab txuag lub pob tseg
  3. Yuav ua li cas hloov cov kev hloov pauv hauv cov qauv database mus rau lwm qhov chaw tsis muaj kev tsis sib haum xeeb thiab cov ntaub ntawv tsiv teb tsaws loj heev
  4. Yuav ua li cas npaj cov txheej txheem ntawm kev ua haujlwm sib luag ntawm ib qhov project los ntawm ntau tus neeg tsim khoom
  5. Yuav ua li cas kom muaj kev nyab xeeb siv ntau qhov kev hloov pauv hauv cov qauv database rau ib puag ncig ntau lawm

    SchemaKeeper tsim los ua haujlwm nrog cov txheej txheem khaws cia uas sau ua lus PL/pgSQL. Kev sim nrog lwm yam lus tsis tau ua tiav, yog li kev siv yuav tsis ua haujlwm zoo lossis tsis tuaj yeem ua tau.

Yuav ua li cas khaws cov qauv database pov tseg hauv VCS

tsev qiv ntawv schema-keeper muab kev ua haujlwm saveDump, uas txuag cov qauv ntawm txhua yam khoom los ntawm cov ntaub ntawv raws li cov ntaub ntawv cais. Cov zis yog ib phau ntawv uas muaj cov qauv database, muab faib ua pawg cov ntaub ntawv uas tuaj yeem yooj yim ntxiv rau VCS.

Cia peb saib ntawm kev hloov cov khoom los ntawm cov ntaub ntawv rau hauv cov ntaub ntawv siv ntau yam piv txwv:

Hom khoom
Lub tswv yim
Lub npe
txheeb ze txoj kev mus ua ntaub ntawv

rooj
pej xeem
nyiaj
./public/tables/accounts.txt

Cov txheej txheem khaws cia
pej xeem
auth(hash bigint)
./public/functions/auth(int8).sql

Taw qhia
booking
tariffs
./booking/views/tariffs.txt

Cov ntsiab lus ntawm cov ntaub ntawv yog cov ntawv nyeem sawv cev ntawm cov qauv ntawm ib qho khoom siv database. Piv txwv li, rau cov txheej txheem khaws cia, cov ntsiab lus ntawm cov ntaub ntawv yuav yog tag nrho cov ntsiab lus ntawm cov txheej txheem khaws cia, pib nrog qhov thaiv. CREATE OR REPLACE FUNCTION.

Raws li tuaj yeem pom los ntawm cov lus saum toj no, txoj hauv kev mus rau cov ntaub ntawv khaws cov ntaub ntawv hais txog hom, schema thiab lub npe ntawm cov khoom. Txoj hauv kev no ua rau nws yooj yim dua rau kev taug kev los ntawm cov pov tseg thiab cov cai tshuaj xyuas cov kev hloov pauv hauv cov ntaub ntawv.

extension .sql rau cov ntaub ntawv nrog cov txheej txheem khaws cia, qhov no tau xaiv kom IDE cia li muab cov cuab yeej rau kev cuam tshuam nrog cov ntaub ntawv thaum qhib cov ntaub ntawv.

Yuav ua li cas taug qab cov kev hloov pauv hauv cov qauv database tom qab txuag lub pob tseg

Los ntawm kev txuag ib pob pov tseg ntawm cov qauv database tam sim no hauv VCS, peb tau txais lub sijhawm los xyuas seb puas tau hloov pauv rau cov qauv database tom qab tsim cov pob tseg. Hauv tsev qiv ntawv schema-keeper txhawm rau txheeb xyuas cov kev hloov pauv hauv cov qauv database, muaj kev ua haujlwm verifyDump, uas rov qab cov ntaub ntawv hais txog qhov sib txawv yam tsis muaj kev phiv.

Lwm txoj hauv kev los kuaj xyuas yog hu rau lub luag haujlwm dua saveDump, qhia meej tib cov npe, thiab kos hauv VCS rau kev hloov pauv. Txij li thaum tag nrho cov khoom los ntawm cov ntaub ntawv khaws cia hauv cov ntaub ntawv cais, VCS tsuas yog qhia cov khoom hloov pauv.
Lub ntsiab tsis zoo ntawm txoj kev no yog qhov yuav tsum tau sau cov ntaub ntawv kom pom cov kev hloov pauv.

Yuav ua li cas hloov cov kev hloov pauv hauv cov qauv database mus rau lwm qhov chaw tsis muaj kev tsis sib haum xeeb thiab cov ntaub ntawv tsiv teb tsaws loj heev

Ua tsaug rau txoj haujlwm deployDump Lub hauv paus code ntawm cov txheej txheem khaws cia tuaj yeem hloov kho raws nraim tib txoj kev raws li daim ntawv thov li niaj zaus. Koj tuaj yeem ntxiv / rho tawm cov kab tshiab hauv cov txheej txheem khaws cia thiab tam sim ntawd thawb kev hloov pauv rau kev tswj hwm, lossis tsim / rho tawm cov txheej txheem khaws cia los ntawm kev tsim / rho tawm cov ntaub ntawv sib thooj hauv cov ntaub ntawv pov tseg.

Piv txwv li, los tsim cov txheej txheem khaws cia tshiab hauv schema public tsuas yog tsim cov ntaub ntawv tshiab nrog qhov txuas ntxiv .sql hauv phau ntawv public/functions, tso qhov chaws ntawm cov txheej txheem khaws cia rau hauv nws, suav nrog cov thaiv CREATE OR REPLACE FUNCTION, ces hu rau lub luag haujlwm deployDump. Hloov kho thiab tshem tawm cov txheej txheem khaws cia tshwm sim ib yam nkaus. Yog li, cov cai nkag mus rau hauv ob qho tib si VCS thiab cov ntaub ntawv tib lub sijhawm.

Yog tias qhov yuam kev tshwm sim hauv qhov chaws ntawm cov txheej txheem khaws cia, lossis qhov tsis sib xws ntawm cov npe ntawm cov ntaub ntawv thiab cov txheej txheem khaws cia, tom qab ntawd deployDump yuav ua tsis tiav, tso saib cov ntawv yuam kev. Kev tsis sib haum xeeb ntawm cov txheej txheem khaws cia ntawm cov pov tseg thiab cov ntaub ntawv tam sim no tsis tuaj yeem siv thaum siv deployDump.

Thaum tsim cov txheej txheem khaws cia tshiab, tsis tas yuav manually sau cov ntaub ntawv npe raug. Nws txaus rau cov ntaub ntawv kom muaj qhov txuas ntxiv .sql. Tom qab hu deployDump cov ntawv yuam kev yuav muaj lub npe raug, uas tuaj yeem siv los hloov npe cov ntaub ntawv.

deployDump tso cai rau koj los hloov qhov tsis ua haujlwm lossis rov qab hom yam tsis muaj kev nqis tes ua ntxiv, thaum nrog txoj hauv kev classical koj yuav tsum tau ua.
ua ntej DROP FUNCTION, thiab tsuas yog tom qab ntawd CREATE OR REPLACE FUNCTION.

Hmoov tsis zoo, muaj qee qhov xwm txheej uas deployDump tsis tuaj yeem thov hloov pauv. Piv txwv li, yog tias ib qho kev ua haujlwm uas siv los ntawm tsawg kawg yog ib qho txiaj ntsig raug tshem tawm. Cov xwm txheej zoo li no raug daws manually siv cov ntaub ntawv tsiv teb tsaws chaw.

Yog tias koj muaj lub luag haujlwm rau kev hloov pauv mus rau cov txheej txheem khaws cia schema-keeper, ces cov ntaub ntawv tsiv teb tsaws yuav tsum tau siv los hloov lwm cov kev hloov hauv cov qauv. Piv txwv li, lub tsev qiv ntawv zoo rau kev ua haujlwm nrog kev tsiv teb tsaws chaw yog lus qhuab qhia/kev tsiv teb tsaws chaw.

Kev tsiv teb tsaws chaw yuav tsum tau siv ua ntej tso tawm deployDump. Qhov no tso cai rau koj ua txhua yam kev hloov pauv rau cov qauv thiab daws cov teeb meem teeb meem kom cov kev hloov pauv hauv cov txheej txheem khaws cia tom qab hloov pauv yam tsis muaj teeb meem.

Kev ua haujlwm nrog kev tsiv teb tsaws chaw yuav raug piav qhia ntau ntxiv hauv cov lus hauv qab no.

Yuav ua li cas npaj cov txheej txheem ntawm kev ua haujlwm sib luag ntawm ib qhov project los ntawm ntau tus neeg tsim khoom

Nws yog ib qho tsim nyog los tsim ib tsab ntawv rau kev ua tiav qhov pib ntawm cov ntaub ntawv, uas yuav raug tso tawm los ntawm tus tsim tawm ntawm nws lub tshuab ua haujlwm, nqa cov qauv ntawm cov ntaub ntawv hauv zos ua raws li cov pob tseg khaws cia hauv VCS. Txoj kev yooj yim tshaj plaws yog faib qhov pib ntawm cov ntaub ntawv hauv zos hauv 3 kauj ruam:

  1. Ntshuam cov ntaub ntawv nrog cov qauv yooj yim uas yuav raug hu ua e.g. base.sql
  2. Thov Kev Migrations
  3. Hu deployDump

base.sql yog qhov pib ntawm qhov kev tsiv teb tsaws chaw raug siv thiab ua tiav deployDump, uas yog base.sql + ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ + deployDump = Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ структура Π‘Π”. Koj tuaj yeem tsim cov ntaub ntawv zoo li no siv cov khoom siv hluav taws xob pg_dump. Siv base.sql tshwj xeeb tshaj yog thaum pib lub database los ntawm kos.

Wb hu rau tsab ntawv kom tiav database initialization refresh.sh. Txoj haujlwm ua haujlwm yuav zoo li no:

  1. Tus tsim tawm tso rau hauv nws ib puag ncig refresh.sh thiab tau txais cov qauv database tam sim no
  2. Tus tsim tawm pib ua haujlwm ntawm tes, hloov kho cov ntaub ntawv hauv zos kom tau raws li qhov xav tau ntawm kev ua haujlwm tshiab (ALTER TABLE ... ADD COLUMN thiab lwm yam)
  3. Tom qab ua tiav txoj haujlwm, tus tsim tawm hu ua haujlwm saveDumplos ua kev hloov pauv rau cov ntaub ntawv hauv VCS
  4. Developer relaunch refresh.shces verifyDumpuas tam sim no qhia cov npe ntawm kev hloov pauv kom suav nrog hauv kev tsiv teb tsaws
  5. Tus tsim tawm hloov tag nrho cov qauv hloov mus rau cov ntaub ntawv tsiv teb tsaws, rov ua dua refresh.sh ΠΈ verifyDump, thiab, yog tias kev tsiv teb tsaws raug muab tso ua ke kom raug, verifyDump yuav tsis muaj qhov sib txawv ntawm cov ntaub ntawv hauv zos thiab cov chaw khaws tseg

Cov txheej txheem tau piav qhia saum toj no yog sib xws nrog gitflow cov hauv paus ntsiab lus. Txhua ceg nyob rau hauv VCS yuav muaj nws tus kheej version ntawm lub pob tseg, thiab thaum sib koom ua ke ceg, cov pob tseg yuav muab merged. Feem ntau, tsis muaj qhov yuav tsum tau ua ntxiv tom qab kev sib koom ua ke, tab sis yog tias muaj kev hloov pauv hauv cov ceg sib txawv, piv txwv li, rau tib lub rooj, kev tsis sib haum xeeb yuav tshwm sim.

Cia peb xav txog qhov xwm txheej tsis sib haum xeeb siv ib qho piv txwv: muaj ceg tsim, los ntawm uas ob ceg ceg: nta1 ΠΈ nta2, uas tsis muaj teeb meem nrog tsim, tab sis muaj kev tsis sib haum xeeb. Lub luag haujlwm yog los ua ke ob ceg rau hauv tsim. Rau cov ntaub ntawv no, nws raug pom zoo kom ua ntej ua ke ib qho ntawm cov ceg ntoo rau hauv tsimthiab ces ua ke tsim mus rau lwm ceg, daws kev tsis sib haum xeeb nyob rau hauv seem seem, thiab ces merging lub xeem ceg mus rau hauv tsim. Thaum lub sij hawm kev daws teeb meem tsis sib haum xeeb, tej zaum koj yuav tau kho cov ntaub ntawv tsiv teb tsaws chaw nyob rau hauv ceg kawg kom nws phim cov pob tseg zaum kawg, uas suav nrog cov txiaj ntsig ntawm kev sib koom ua ke.

Yuav ua li cas kom muaj kev nyab xeeb siv ntau qhov kev hloov pauv hauv cov qauv database rau ib puag ncig ntau lawm

Ua tsaug rau qhov muaj qhov pov tseg ntawm cov ntaub ntawv tam sim no hauv VCS, nws tuaj yeem tshawb xyuas cov ntaub ntawv tsim khoom kom ua raws li cov qauv tsim nyog. Qhov no ua kom ntseeg tau tias tag nrho cov kev hloov pauv uas cov neeg tsim khoom npaj tau ua tiav tau xa mus rau lub hauv paus tsim.

txij li thaum DDL hauv PostgreSQL yog kev lag luam, nws raug pom zoo kom ua raws li cov lus txib hauv qab no, yog li ntawd, nyob rau hauv cov ntaub ntawv ntawm ib qho kev npaj txhij txog yuam kev, koj muaj peev xwm "painlessly" ua. ROLLBACK:

  1. Pib kev lag luam
  2. Ua txhua yam kev tsiv teb tsaws chaw hauv kev sib pauv
  3. Nyob rau hauv tib txoj kev pauv, ua deployDump
  4. Yog tsis ua tiav qhov kev sib pauv, ua tiav verifyDump. Yog tias tsis muaj qhov yuam kev, khiav COMMIT. Yog tias muaj qhov yuam kev, khiav ROLLBACK

Cov kauj ruam no tuaj yeem yooj yim ua ke rau hauv cov txheej txheem uas twb muaj lawm rau kev xa mus rau daim ntawv thov, suav nrog xoom-downtime.

xaus

Ua tsaug rau cov txheej txheem tau piav qhia saum toj no, nws muaj peev xwm nyem qhov ua tau zoo tshaj plaws ntawm "PHP + PostgreSQL" cov haujlwm, thaum ua rau kev loj hlob me ntsis yooj yim piv rau kev siv tag nrho cov kev lag luam logic hauv daim ntawv thov tseem ceeb. Ntxiv mus, cov ntaub ntawv ua nyob rau hauv PL/pgSQL feem ntau zoo li pob tshab thiab xav tau cov lej tsawg dua li qhov ua haujlwm zoo ib yam sau hauv PHP.

Tau qhov twg los: www.hab.com

Ntxiv ib saib