د دې مقالې موخه د کتابتون مثال کارول دي
د دې مقالې معلومات به لومړی د هغو پراختیا کونکو لپاره ګټور وي څوک چې غواړي د PostgreSQL وړتیاوو څخه ډیره ګټه پورته کړي، مګر په ډیټابیس کې د سوداګرۍ منطق ساتلو کې د ستونزو سره مخ دي.
دا مقاله به په ډیټابیس کې د سوداګرۍ منطق ذخیره کولو ګټې یا زیانونه بیان نکړي. داسې انګیرل کیږي چې انتخاب لا دمخه د لوستونکي لخوا ترسره شوی.
لاندې پوښتنې به په پام کې ونیول شي:
- په کوم شکل کې باید د ډیټابیس جوړښت ډمپ د نسخې کنټرول سیسټم کې زیرمه شي (له دې وروسته د VCS په نوم یادیږي)
- د ډمپ خوندي کولو وروسته د ډیټابیس جوړښت کې بدلونونه څنګه تعقیب کړئ
- د ډیټابیس جوړښت کې بدلونونه د شخړو او لوی مهاجرت فایلونو پرته نورو چاپیریالونو ته لیږدولو څرنګوالی
- د څو پراختیا کونکو لخوا په یوه پروژه کې د موازي کار پروسې تنظیم کولو څرنګوالی
- د تولید چاپیریال ته د ډیټابیس جوړښت کې نور بدلونونه په خوندي ډول ځای په ځای کولو څرنګوالی
سکیماکیپر په ژبه لیکل شوي ذخیره شوي طرزالعملونو سره کار کولو لپاره ډیزاین شوی
PL/pgSQL . د نورو ژبو سره ازموینه نه ده ترسره شوې، نو کارول ممکن دومره اغیزمن نه وي یا ممکن ممکن نه وي.
په VCS کې د ډیټابیس جوړښت ډمپ ذخیره کولو څرنګوالی
کړی saveDump
، کوم چې د ډیټابیس څخه د ټولو شیانو جوړښت د جلا متن فایلونو په توګه خوندي کوي. محصول یو لارښود دی چې د ډیټابیس جوړښت لري، په ګروپي فایلونو ویشل شوي چې په اسانۍ سره VCS ته اضافه کیدی شي.
راځئ چې د څو مثالونو په کارولو سره د ډیټابیس څخه فایلونو ته د شیانو بدلولو ته وګورو:
د څيز ډول
دا پلان
سرلیک
د فایل لپاره اړونده لاره
جدول
د عامه
حسابونو
./public/tables/accounts.txt
د ذخیره کولو طرزالعمل
د عامه
auth(hash bigint)
./public/functions/auth(int8).sql
پېژندنه
پرواز
تعرفې
./booking/views/tariffs.txt
د فایلونو مینځپانګه د یو ځانګړي ډیټابیس څیز جوړښت متني نمایش دی. د مثال په توګه، د ذخیره شوي پروسیجرونو لپاره، د فایل مینځپانګې به د ذخیره شوي طرزالعمل بشپړ تعریف وي، د بلاک سره پیل کیږي CREATE OR REPLACE FUNCTION
.
لکه څنګه چې د پورته جدول څخه لیدل کیدی شي، فایل ته لاره د څیز ډول، سکیما او نوم په اړه معلومات ذخیره کوي. دا طریقه په ډیټابیس کې د بدلونونو د ډمپ او کوډ بیاکتنې له لارې تګ راتګ اسانه کوي.
د ترویج
.sql
د ذخیره شوي پروسې سرچینې کوډ سره د فایلونو لپاره، دا غوره شوی ترڅو IDE په اتوماتيک ډول د ډیټابیس سره د متقابل عمل لپاره وسایل چمتو کړي کله چې فایل خلاص شي.
د ډمپ خوندي کولو وروسته د ډیټابیس جوړښت کې بدلونونه څنګه تعقیب کړئ
په VCS کې د اوسني ډیټابیس جوړښت ډمپ خوندي کولو سره، موږ دا فرصت ترلاسه کوو چې وګورو چې ایا د ډمپ رامینځته کیدو وروسته د ډیټابیس جوړښت کې بدلونونه رامینځته شوي. په کتابتون کې verifyDump
، کوم چې د اړخیزو تاثیراتو پرته د توپیرونو په اړه معلومات بیرته راوړي.
د چک کولو بدیل لاره د فنکشن بیا زنګ وهل دي saveDump
د ورته لارښود مشخص کول، او د بدلونونو لپاره په VCS کې وګورئ. څرنګه چې د ډیټابیس ټول توکي په جلا فایلونو کې خوندي شوي، VCS به یوازې بدل شوي توکي وښيي.
د دې میتود اصلي زیان د بدلونونو لیدلو لپاره د فایلونو بیا لیکلو ته اړتیا ده.
د ډیټابیس جوړښت کې بدلونونه د شخړو او لوی مهاجرت فایلونو پرته نورو چاپیریالونو ته لیږدولو څرنګوالی
د فعالیت څخه مننه deployDump
د ذخیره شوي پروسیجرونو سرچینې کوډ په سمه توګه د منظم غوښتنلیک سرچینې کوډ په څیر ایډیټ کیدی شي. تاسو کولی شئ د ذخیره شوي طرزالعمل کوډ کې نوي لینونه اضافه / حذف کړئ او سمدلاسه د نسخې کنټرول ته بدلونونه فشار ورکړئ ، یا د ډمپ ډایرکټر کې د اړوندو فایلونو رامینځته کولو / حذف کولو سره ذخیره شوي پروسیجرونه رامینځته کړئ / حذف کړئ.
د مثال په توګه، په سکیما کې د نوي ذخیره شوي طرزالعمل رامینځته کول public
یوازې د توسیع سره یو نوی فایل جوړ کړئ .sql
په لارښود کې public/functions
، په دې کې د ذخیره شوي طرزالعمل سرچینه کوډ ځای په ځای کړئ ، په شمول د بلاک CREATE OR REPLACE FUNCTION
، بیا فنکشن ته زنګ ووهئ deployDump
. د ذخیره شوي طرزالعمل بدلول او حذف کول په ورته ډول پیښیږي. په دې توګه، کوډ دواړه VCS او ډیټابیس ته په ورته وخت کې ځي.
که چیرې د هرې زیرمه شوي طرزالعمل سرچینې کوډ کې کومه تیروتنه څرګند شي ، یا د فایل نومونو او زیرمه شوي طرزالعمل ترمینځ توپیر ، نو deployDump
به ناکام شي، د خطا متن ښودل. د ډمپ او اوسني ډیټابیس تر مینځ د ذخیره شوي پروسیجرونو بې اتفاقي د کارولو پرمهال ناشونې ده deployDump
.
کله چې د نوي ذخیره شوي طرزالعمل رامینځته کول، په لاسي ډول د سم فایل نوم داخلولو ته اړتیا نشته. دا د فایل لپاره کافي ده چې توسیع ولري
.sql
. له زنګ وروستهdeployDump
د خطا متن به سم نوم ولري، کوم چې د فایل نوم بدلولو لپاره کارول کیدی شي.
deployDump
تاسو ته اجازه درکوي د فنکشن پیرامیټرې بدل کړئ یا پرته له اضافي کړنو څخه بیرته راستنیدو ډول ، پداسې حال کې چې د کلاسیک چلند سره تاسو باید
لومړی اجرا کړئ DROP FUNCTION
، او یوازې بیا CREATE OR REPLACE FUNCTION
.
له بده مرغه، ځینې شرایط شتون لري چیرې چې deployDump
نشي کولی په اتوماتيک ډول بدلونونه پلي کړي. د مثال په توګه، که چیرې یو محرک فنکشن چې لږترلږه د یو محرک لخوا کارول کیږي له مینځه وړل کیږي. دا ډول حالتونه د مهاجرت فایلونو په کارولو سره په لاسي ډول حل کیږي.
که تاسو د ذخیره شوي پروسیجرونو کې د بدلونونو د لیږد مسولیت لرئ
مهاجرت باید د پیل کولو دمخه پلي شي deployDump
. دا تاسو ته اجازه درکوي په جوړښت کې ټول بدلونونه رامینځته کړئ او ستونزمن حالتونه حل کړئ ترڅو په ذخیره شوي پروسیجرونو کې بدلونونه وروسته له ستونزو پرته لیږدول کیږي.
د مهاجرت سره کار کول به په لاندې برخو کې په تفصیل سره تشریح شي.
د څو پراختیا کونکو لخوا په یوه پروژه کې د موازي کار پروسې تنظیم کولو څرنګوالی
دا اړینه ده چې د ډیټابیس بشپړ پیل کولو لپاره سکریپټ رامینځته کړئ ، کوم چې د پراختیا کونکي لخوا به د هغه کاري ماشین کې پیل شي ، د ځایی ډیټابیس جوړښت په VCS کې خوندي شوي ډمپ سره سم راوړي. ترټولو آسانه لاره دا ده چې د محلي ډیټابیس پیل په 3 مرحلو ویشئ:
- د بنسټیز جوړښت سره یو فایل وارد کړئ چې ورته ویل کیږي
base.sql
- د مهاجرت پلي کول
- ننګونې
deployDump
base.sql
د پیل ټکی دی چې په سر کې یې مهاجرت پلي کیږي او اجرا کیږيdeployDump
دا دیbase.sql + миграции + deployDump = актуальная структура БД
. تاسو کولی شئ د یوټیلیټ په کارولو سره دا ډول فایل جوړ کړئpg_dump
. کارولbase.sql
په ځانګړې توګه کله چې له سکریچ څخه ډیټابیس پیل کړئ.
راځئ چې د بشپړ ډیټابیس پیل کولو لپاره سکریپټ ته زنګ ووهو refresh.sh
. د کار جریان ممکن داسې ښکاري:
- پراختیا کونکی په خپل چاپیریال کې پیل کوي
refresh.sh
او اوسنی ډیټابیس جوړښت ترلاسه کوي - پراختیا کونکی په لاس کې کار پیل کوي ، د نوي فعالیت اړتیاو پوره کولو لپاره محلي ډیټابیس بدلوي (
ALTER TABLE ... ADD COLUMN
وغيره) - د دندې بشپړولو وروسته ، پراختیا کونکی فنکشن ته زنګ ووهي
saveDump
د VCS په ډیټابیس کې د بدلونونو ژمن کول - پرمخ وړونکي بیا پیل کول
refresh.sh
بیاverifyDump
کوم چې اوس په مهاجرت کې د شاملولو لپاره د بدلونونو لیست ښیې - پراختیا کونکی ټول جوړښت بدلونونه د مهاجرت فایل ته لیږدوي، بیا پرمخ ځي
refresh.sh
иverifyDump
، او، که مهاجرت په سمه توګه ترتیب شوی وي،verifyDump
د محلي ډیټابیس او خوندي شوي ډمپ ترمینځ به هیڅ توپیر ونه ښیې
پورته بیان شوي پروسه د gitflow اصولو سره مطابقت لري. په VCS کې هره څانګه به د ډمپ خپله نسخه ولري، او کله چې څانګې یوځای شي، ډمپونه به یوځای شي. په ډیری حاالتو کې، د یو ځای کیدو وروسته هیڅ اضافي اقدام ته اړتیا نشته، مګر که چیرې په مختلفو څانګو کې بدلونونه رامینځته شي، د بیلګې په توګه، ورته میز ته، کیدای شي شخړه رامنځته شي.
راځئ چې د مثال په کارولو سره د شخړې وضعیت په پام کې ونیسو: یوه څانګه شتون لري پرمختیا، چې له هغې څخه دوه څانګې څانګې لري: ځانګړتیا1 и ځانګړتیا2، کوم چې سره هیڅ ډول ټکر نلري پرمختیا، مګر د یو بل سره شخړې لري. دنده دا ده چې دواړه څانګې یوځای شي پرمختیا. د دې قضیې لپاره، دا سپارښتنه کیږي چې لومړی د څانګو څخه یو یې یوځای کړئ پرمختیااو بیا یوځای شي پرمختیا پاتې څانګې ته، په پاتې څانګه کې د شخړو حل کول، او بیا وروستنۍ څانګه یوځای کول پرمختیا. د شخړو د حل مرحلې په جریان کې، تاسو ممکن په وروستي څانګه کې د مهاجرت فایل حل کړئ ترڅو دا د وروستي ډمپ سره سمون ولري، کوم چې د ادغام پایلې شاملې دي.
د تولید چاپیریال ته د ډیټابیس جوړښت کې نور بدلونونه په خوندي ډول ځای په ځای کولو څرنګوالی
په VCS کې د اوسني ډیټابیس جوړښت د ډمپ شتون څخه مننه ، دا ممکنه کیږي چې د اړتیا وړ جوړښت سره دقیق مطابقت لپاره د تولید ډیټابیس چیک کړئ. دا ډاډ ورکوي چې ټول بدلونونه چې پراختیا کونکي یې اراده لري په بریالیتوب سره د تولید بیس ته لیږدول شوي.
راهیسې ROLLBACK
:
- معامله پیل کړئ
- ټول مهاجرتونه په یوه معامله کې ترسره کړئ
- په ورته معامله کې، اجرا کول
deployDump
- د لیږد بشپړولو پرته، اجرا کول
verifyDump
. که کومه تېروتنه نه وي، چلولCOMMIT
. که چیرې تېروتنې شتون ولري، چل کړئROLLBACK
دا مرحلې په اسانۍ سره د غوښتنلیک ګمارلو لپاره موجوده طریقو کې مدغم کیدی شي ، پشمول د صفر کم وخت.
پایلې
د پورته ذکر شوي میتودونو څخه مننه ، دا ممکنه ده چې د "PHP + PostgreSQL" پروژو څخه اعظمي فعالیت وخورئ ، پداسې حال کې چې د اصلي غوښتنلیک کوډ کې د سوداګرۍ ټول منطق پلي کولو په پرتله نسبتا لږ پرمختیا اسانتیا قرباني کول. سربیره پردې، د معلوماتو پروسس کول
سرچینه: www.habr.com