ʻO ka loiloi pāʻoihana ma ka waihona me ka hoʻohana ʻana iā SchemaKeeper

ʻO ke kumu o kēia ʻatikala e hoʻohana i ka laʻana o kahi waihona mea mālama papahana hōʻike i nā mea hana hiki ke hoʻomaʻamaʻa nui i ke kaʻina hana o ka hoʻomohala ʻana i nā ʻikepili i loko o nā papahana PHP me ka hoʻohana ʻana i ka PostgreSQL DBMS.

ʻO ka ʻike mai kēia ʻatikala, ʻo ka mea mua, e pono i nā mea hoʻomohala e makemake e hana i ka hapa nui o nā mana PostgreSQL, akā ke alo nei i nā pilikia e mālama ana i ka loiloi ʻoihana i waiho ʻia i ka waihona.

ʻAʻole kēia ʻatikala e wehewehe i nā pono a i ʻole nā ​​​​pōʻino o ka mālama ʻana i ka loiloi ʻoihana i loko o kahi waihona. Ua manaʻo ʻia ua koho mua ʻia e ka mea heluhelu.

E noʻonoʻo ʻia nā nīnau penei:

  1. Ma ke ʻano he aha ke ʻano e mālama ʻia ai kahi waihona waihona waihona i loko o kahi ʻōnaehana mana mana (i kapa ʻia ma hope aku ʻo VCS)
  2. Pehea e ʻimi ai i nā loli i ka hoʻolālā waihona ma hope o ka mālama ʻana i kahi dump
  3. Pehea e hoʻololi ai i ka hoʻololi ʻana o ka waihona waihona i nā wahi ʻē aʻe me ka hakakā ʻole a me nā faila neʻe nui
  4. Pehea e hoʻonohonoho ai i ke kaʻina hana like ma kahi papahana e kekahi mau mea hoʻomohala
  5. Pehea e hoʻonohonoho pono ai i nā hoʻololi hou aʻe i ka ʻōnaehana waihona i kahi ʻenehana hana

    Hoʻokohu i hoʻolālā ʻia no ka hana ʻana me nā kaʻina hana i mālama ʻia i kākau ʻia ma ka ʻōlelo PL/pgSQL. ʻAʻole i hoʻokō ʻia ka hoʻāʻo ʻana me nā ʻōlelo ʻē aʻe, no laila ʻaʻole maikaʻi ka hoʻohana ʻana a i ʻole hiki ke hiki.

Pehea e mālama ai i kahi waihona waihona waihona ma VCS

waihona mea mālama papahana hāʻawi i kahi hana saveDump, ka mea e mālama ai i ke ʻano o nā mea a pau mai ka waihona ma ke ʻano he waihona kikokikona kaʻawale. ʻO ka hoʻopuka he papa kuhikuhi i loaʻa ka ʻōnaehana waihona, i māhele ʻia i nā faila hui i hiki ke hoʻohui maʻalahi iā VCS.

E nānā kākou i ka hoʻololi ʻana i nā mea mai kahi waihona i nā faila me ka hoʻohana ʻana i kekahi mau laʻana:

ʻAno mea
ʻO ke kumuhana
Inoa
ʻO ke ala pili i ka faila

papaʻaina
aupuni
buke
./public/tables/accounts.txt

Kaʻina hana mālama ʻia
aupuni
auth(hash bigint)
./public/functions/auth(int8).sql

Hōʻike
hoʻokoe
nā papa helu
./booking/views/tariffs.txt

ʻO nā mea i loko o nā faila he hōʻike kikokikona o ke ʻano o kahi mea waihona kikoʻī. No ka laʻana, no nā kaʻina hana i mālama ʻia, ʻo ka ʻike o ka faila ka wehewehe piha o ke kaʻina hana i mālama ʻia, e hoʻomaka me ka poloka CREATE OR REPLACE FUNCTION.

E like me ka mea i ʻike ʻia mai ka papa ma luna, ʻo ke ala i ka faila e mālama i ka ʻike e pili ana i ke ʻano, schema a me ka inoa o ka mea. ʻO kēia ala e maʻalahi ka hoʻokele ʻana ma ka dump a me ka loiloi code o nā loli i ka waihona.

palena manawa .sql no nā faila me ke code kumu kaʻina hana mālama ʻia, ua koho ʻia kēia no ka hāʻawi ʻana o ka IDE i nā mea hana no ka launa pū ʻana me ka waihona i ka wā e wehe ʻia ai ka faila.

Pehea e ʻimi ai i nā loli i ka hoʻolālā waihona ma hope o ka mālama ʻana i kahi dump

Ma ka mālama ʻana i kahi hoʻokuʻu o ka ʻōnaehana waihona o kēia manawa ma VCS, loaʻa iā mākou ka manawa kūpono e nānā inā ua hoʻololi ʻia ka ʻōnaehana waihona ma hope o ka hana ʻana o ka dump. Ma ka waihona mea mālama papahana no ka ʻike ʻana i nā hoʻololi i ka hoʻolālā waihona, hāʻawi ʻia kahi hana verifyDump, e hoʻihoʻi i ka ʻike e pili ana i nā ʻokoʻa me ka ʻole o nā hopena ʻaoʻao.

ʻO kahi ala ʻē aʻe e nānā ai ʻo ke kāhea hou ʻana i ka hana saveDump, e kuhikuhi ana i ka papa kuhikuhi like, a e nānā i ka VCS no nā loli. No ka mea ua mālama ʻia nā mea a pau mai ka waihona i nā faila ʻokoʻa, e hōʻike wale ʻo VCS i nā mea i hoʻololi ʻia.
ʻO ka hemahema nui o kēia ʻano, ʻo ia ka pono e kākau i nā faila i mea e ʻike ai i nā loli.

Pehea e hoʻololi ai i ka hoʻololi ʻana o ka waihona waihona i nā wahi ʻē aʻe me ka hakakā ʻole a me nā faila neʻe nui

Mahalo i ka hana deployDump Hiki ke hoʻoponopono ʻia ke kumu kumu o nā kaʻina hana i mālama ʻia e like me ke code kumu noi maʻamau. Hiki iā ʻoe ke hoʻohui/holo i nā laina hou i loko o ke code kaʻina hana mālama ʻia a kaomi koke i nā hoʻololi i ka mana mana, a i ʻole hana/holo i nā kaʻina hana i mālama ʻia ma ka hana ʻana/ holoi ʻana i nā faila pili i ka papa kuhikuhi dump.

No ka laʻana, e hana i kahi kaʻina hana hou i mālama ʻia i kahi schema public hana wale i kahi faila hou me ka hoʻonui .sql ma ka papa kuhikuhi public/functions, kau i ke code kumu o ke kaʻina hana i mālama ʻia i loko, me ka poloka CREATE OR REPLACE FUNCTION, a laila e kāhea i ka hana deployDump. Hoʻololi a holoi ʻia kahi kaʻina hana mālama ʻia ma ke ʻano like. No laila, komo ke code i loko o ka VCS a me ka waihona i ka manawa like.

Inā ʻike ʻia kahi hewa ma ke kumu kumu o kekahi kaʻina hana i mālama ʻia, a i ʻole he ʻokoʻa ma waena o nā inoa o ka faila a me ke kaʻina hana i mālama ʻia, a laila deployDump e hāʻule, e hōʻike ana i nā kikokikona hewa. ʻAʻole hiki ke hoʻohālikelike i nā kaʻina hana i mālama ʻia ma waena o ka dump a me ka waihona o kēia manawa ke hoʻohana deployDump.

I ka hana ʻana i kahi kaʻina hana mālama hou, ʻaʻohe pono e hoʻokomo lima i ka inoa faila pololei. Ua lawa ka waihona i ka hoʻonui .sql. Ma hope o ke kelepona deployDump e loaʻa i ka kikokikona hewa ka inoa pololei, hiki ke hoʻohana ʻia e hoʻololi i ka faila.

deployDump hiki iā ʻoe ke hoʻololi i nā ʻāpana o kahi hana a i ʻole ʻano hoʻihoʻi me ka ʻole o nā hana hou, ʻoiai me ke ʻano maʻamau e pono ai ʻoe
e hooko mua DROP FUNCTION, a laila wale nō CREATE OR REPLACE FUNCTION.

ʻO ka mea pōʻino, aia kekahi mau kūlana kahi deployDump hiki ʻole ke hoʻohana i nā loli. No ka laʻana, inā hoʻoneʻe ʻia kahi hana hoʻoiho i hoʻohana ʻia e ka liʻiliʻi hoʻokahi. Hoʻoholo lima ʻia kēlā mau kūlana me ka hoʻohana ʻana i nā faila migration.

Inā ʻoe ke kuleana no ka neʻe ʻana i nā loli i nā kaʻina hana mālama mea mālama papahana, a laila pono e hoʻohana ʻia nā faila neʻe e hoʻololi i nā hoʻololi ʻē aʻe i ka hale. No ka laʻana, kahi waihona maikaʻi no ka hana ʻana me nā neʻe aʻo / neʻe.

Pono e hoʻohana ʻia nā neʻe ma mua o ka hoʻomaka ʻana deployDump. ʻAe kēia iā ʻoe e hana i nā hoʻololi āpau i ka hoʻolālā a hoʻoholo i nā kūlana pilikia i hiki ke hoʻololi ʻia nā loli i nā kaʻina hana mālama ʻia me ka pilikia ʻole.

E wehewehe ʻia ka hana me ka neʻe ʻana ma nā ʻāpana aʻe.

Pehea e hoʻonohonoho ai i ke kaʻina hana like ma kahi papahana e kekahi mau mea hoʻomohala

Pono e hana i kahi palapala no ka hoʻomaka ʻana o ka waihona, e hoʻomaka ʻia e ka mea hoʻomohala ma kāna mīkini hana, e lawe ana i ke ʻano o ka waihona kūloko e like me ka dump i mālama ʻia ma VCS. ʻO ke ala maʻalahi ʻo ka puʻunaue ʻana i ka hoʻomaka ʻana o ka waihona kūloko i 3 mau ʻanuʻu:

  1. Hoʻokomo i kahi faila me kahi hoʻolālā kumu e kapa ʻia e.g. base.sql
  2. Ke noi nei i ka neʻe ʻana
  3. Paʻi deployDump

base.sql ʻo ia ka wahi hoʻomaka ma luna o ka neʻe ʻana a hoʻokō ʻia deployDump,ʻo ia hoʻi base.sql + миграции + deployDump = актуальная структура БД. Hiki iā ʻoe ke hana i kahi faila me ka hoʻohana ʻana i ka pono pg_dump. Hoʻohana ʻia base.sql wale nō i ka wā e hoʻomaka ai i ka ʻikepili mai ka wā kahiko.

E kāhea kākou i ka palapala no ka hoʻomaka ʻana i ka waihona waihona refresh.sh. Penei paha ke kaʻina hana:

  1. Hoʻomaka ka mea hoʻomohala i kona kaiapuni refresh.sh a loaʻa ka ʻōnaehana waihona o kēia manawa
  2. Hoʻomaka ka mea hoʻomohala i ka hana ma ka lima, e hoʻololi i ka waihona kūloko e hoʻokō i nā pono o ka hana hou (ALTER TABLE ... ADD COLUMN etc)
  3. Ma hope o ka pau ʻana o ka hana, kāhea ka mea hoʻomohala i ka hana saveDumpe hoʻololi i ka waihona ma VCS
  4. Hoʻomaka hou ka mea hoʻomohala refresh.shalaila verifyDumpe hōʻike ana i kēia manawa i kahi papa inoa o nā hoʻololi e hoʻokomo i ka neʻe
  5. Hoʻololi ka mea hoʻomohala i nā hoʻololi āpau i ka faila neʻe, holo hou refresh.sh и verifyDump, a inā i hōʻuluʻulu pololei ʻia ka neʻe ʻana, verifyDump ʻaʻole e hōʻike i nā ʻokoʻa ma waena o ka waihona kūloko a me ka waihona i mālama ʻia

Ua kūpono ke kaʻina hana i hōʻike ʻia ma luna me nā loina gitflow. Loaʻa i kēlā me kēia lālā o ka VCS kona mana ponoʻī o ka dump, a i ka hui ʻana i nā lālā, e hoʻohui ʻia nā ʻōpala. I ka hapanui o nā hihia, ʻaʻohe hana hou e pono ai ma hope o ka hoʻohui ʻana, akā inā i hoʻololi ʻia i nā lālā like ʻole, no ka laʻana, i ka papaʻaina hoʻokahi, hiki ke kū mai kahi paio.

E noʻonoʻo kākou i kahi kūlana hakakā me ka hoʻohana ʻana i kahi laʻana: aia kahi lālā hoʻomōhala, mai loko mai o ia mau lala elua: tampok1 и tampok2, i paio ole me hoʻomōhala, aka, he paio kekahi me kekahi. ʻO ka hana e hoʻohui i nā lālā ʻelua i loko hoʻomōhala. No kēia hihia, pono e hoʻohui mua i kekahi o nā lālā i loko hoʻomōhalaa laila hoʻohui hoʻomōhala i ka lālā i koe, e hoʻoholo i nā paio ma ka lālā i koe, a laila hoʻohui i ka lālā hope i loko hoʻomōhala. I ka wā o ka hoʻoholo ʻana i ka paio, pono paha ʻoe e hoʻoponopono i ka faila neʻe ʻana i ka lālā hope i kūpono ia i ka hoʻolei hope loa, ʻo ia hoʻi nā hopena o nā hui.

Pehea e hoʻonohonoho pono ai i nā hoʻololi hou aʻe i ka ʻōnaehana waihona i kahi ʻenehana hana

Mahalo i ka loaʻa ʻana o kahi hoʻokuʻu ʻana o ka ʻōnaehana waihona o kēia manawa ma VCS, hiki ke nānā i ka ʻikepili hana no ka hoʻokō pono ʻana i ke ʻano i koi ʻia. ʻO kēia ka mea e hōʻoia i ka hoʻololi maikaʻi ʻia o nā hoʻololi a pau i manaʻo ʻia e nā mea hoʻomohala i ka waihona hana.

mai DDL ma PostgreSQL pāʻoihana, Manaʻo ʻia e hoʻokō i kēia kauoha hoʻolaha, no laila, inā he hewa i manaʻo ʻole ʻia, hiki iā ʻoe ke "ʻeha" e hoʻokō. ROLLBACK:

  1. E hoʻomaka i ke kālepa
  2. Hana i nā neʻe a pau ma kahi kālepa
  3. Ma ka hana like, e hoʻokō deployDump
  4. Me ka hoʻopau ʻole i ke kālepa, hoʻokō verifyDump. Inā ʻaʻohe hewa, holo COMMIT. Inā he mau hewa, holo ROLLBACK

Hiki ke hoʻohui maʻalahi kēia mau ʻanuʻu i nā ala e kū nei i ka hoʻolaha ʻana i nā noi, me ka zero-downtime.

hopena

Mahalo i nā ʻano hana i hōʻike ʻia ma luna nei, hiki ke ʻoki i ka hana kiʻekiʻe ma waho o nā papahana "PHP + PostgreSQL", ʻoiai ke kaumaha nei i ka ʻoluʻolu hoʻomohala liʻiliʻi i hoʻohālikelike ʻia i ka hoʻokō ʻana i nā loiloi ʻoihana āpau i ka code noi nui. Eia kekahi, hoʻoili ʻikepili ma PL/pgSQL ʻike pinepine ʻia a ʻoi aku ka liʻiliʻi o ke code ma mua o ka hana like i kākau ʻia ma PHP.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka