pgroll هي أداة سطر أوامر مفتوحة المصدر توفر ترحيل مخطط آمن وقابل للانعكاس لـ PostgreSQL من خلال تقديم إصدارات مخطط متعددة في وقت واحد. إنه يهتم بعمليات الترحيل المعقدة لضمان استمرار تطبيقات العميل في العمل أثناء تحديث مخطط قاعدة البيانات. يتضمن ذلك ضمان تطبيق التغييرات دون قفل قاعدة البيانات ، وأن إصدارات المخطط القديمة والجديدة تعمل في وقت واحد (حتى عند إجراء التغييرات!). هذا يزيل المخاطر المتعلقة بترحيل المخطط ، ويؤدي إلى تبسيط تطبيق تطبيق العميل بشكل كبير ، مما يسمح أيضًا بالتراجع الفوري.
شاهد منشور المدونة التمهيدية لمزيد من المشكلات التي تم حلها بواسطة pgroll .
يعمل pgroll عن طريق إنشاء مخططات افتراضية باستخدام طرق عرض أعلى الجداول المادية. هذا يسمح بإجراء جميع التغييرات اللازمة للترحيل دون التأثير على العملاء الحاليين.

يتبع pgroll سير عمل توسيع/عقد. عند بدء الترحيل ، سيؤدي جميع التغييرات المضافة (إنشاء جداول ، إضافة أعمدة ، إلخ) في المخطط المادي ، دون كسرها.
عندما يكون تغيير كسر في العمود ، سيقوم بإنشاء عمود جديد في المخطط الفعلي ، ويبده من العمود القديم. أيضًا ، تكوين المشغلات للتأكد من أن جميع عمليات الكتابة إلى العمود القديم/الجديد يتم نشرها على نظيره خلال فترة الترحيل النشطة بأكملها. سيتم عرض العمود الجديد في الإصدار الجديد من المخطط.
بمجرد اكتمال مرحلة البدء ، يصبح إصدار المخطط الجديد جاهزًا ، حيث يقوم بتخطيط جميع المشاهدات إلى الجداول والأعمدة المناسبة. يمكن لتطبيقات العميل بعد ذلك الوصول إلى إصدار المخطط الجديد ، بينما لا يزال العرض القديم متاحًا. هذه هي اللحظة لبدء طرح الإصدار الجديد من تطبيق العميل.

عندما لا تستخدم تطبيقات العميل إلى إصدار المخطط القديم ، يمكن إكمال الترحيل. سيؤدي ذلك إلى إزالة المخطط القديم ، وسيكون المخطط الجديد هو الوحيد المتاح. لم تعد هناك حاجة إلى إزالة الجداول والأعمدة (لا يوجد عميل يستخدم هذا في هذه المرحلة) ، وسيتم إعادة تسمية الجداول الجديدة إلى أسمائها النهائية. لا تزال تطبيقات العميل تعمل خلال هذه المرحلة ، حيث لا تزال المشاهدات تنطلق إلى الجداول والأعمدة المناسبة.
الثنائيات متاحة لـ Linux و MacOS & Windows ، والتحقق من إصداراتنا.
لتثبيت pgroll من المصدر ، قم بتشغيل الأمر التالي:
go install github.com/xataio/pgroll@latestملاحظة: يتطلب الذهاب 1.23 أو أحدث.
لتثبيت pgroll مع homebrew ، قم بتشغيل الأمر التالي:
# macOS or Linux
brew tap xataio/pgroll
brew install pgroll اتبع هذه الخطوات لتنفيذ أول عملية ترحيل المخطط الخاصة بك باستخدام pgroll :
يحتاج pgroll إلى تخزين بعض الحالة الداخلية في قاعدة البيانات. يتم إنشاء جدول لتتبع إصدار المخطط الحالي وسجل إصدار المتجر. لإعداد قاعدة البيانات ، قم بتشغيل الأمر التالي:
pgroll init --postgres-url postgres://user:password@host:port/dbname إنشاء ملف ترحيل. يمكنك التحقق من مجلد الأمثلة لبعض الأمثلة. على سبيل المثال ، استخدم ملف الترحيل هذا لإنشاء جدول customers جديد:
{
"name" : " initial_migration " ,
"operations" : [
{
"create_table" : {
"name" : " customers " ,
"columns" : [
{
"name" : " id " ,
"type" : " integer " ,
"pk" : true
},
{
"name" : " name " ,
"type" : " varchar(255) " ,
"unique" : true
},
{
"name" : " bio " ,
"type" : " text " ,
"nullable" : true
}
]
}
}
]
}ثم قم بتشغيل الأمر التالي لبدء الترحيل:
pgroll --postgres-url postgres://user:password@host:port/dbname start initial_migration.jsonسيؤدي ذلك إلى إنشاء نسخة مخطط جديدة في قاعدة البيانات ، وتطبيق عمليات الترحيل (إنشاء جدول). بعد انتهاء هذا الأمر ، يمكن الوصول إلى كل من الإصدار القديم من المخطط (مع عدم وجود جدول عملاء) وسيتم الوصول إلى الجدول الجديد (مع جدول العملاء) في وقت واحد.
بعد بدء الترحيل ، يمكن أن تبدأ تطبيقات العميل باستخدام إصدار المخطط الجديد. من أجل القيام بذلك ، يجب تكوينها للوصول إليها. يمكن القيام بذلك عن طريق تعيين search_path على اسم إصدار المخطط الجديد (المقدم من إخراج pgroll start ) ، على سبيل المثال:
SET search_path TO ' public_initial_migration ' ;بمجرد عدم وجود تطبيقات عميل أكثر باستخدام إصدار المخطط القديم ، يمكن إكمال الترحيل. هذا سوف يزيل المخطط القديم. لإكمال الترحيل ، قم بتشغيل الأمر التالي:
pgroll --postgres-url postgres://user:password@host:port/dbname completeفي أي وقت أثناء الترحيل ، يمكن إعادة إرجاعه إلى الإصدار السابق. سيؤدي ذلك إلى إزالة المخطط الجديد ويترك المخطط القديم كما كان قبل بدء الهجرة. لتراجع الترحيل ، قم بتشغيل الأمر التالي:
pgroll --postgres-url postgres://user:password@host:port/dbname rollbackللحصول على مزيد من الاستخدام المتقدم والدروس والخيارات التفصيلية ، تشير إلى الأدلة والمراجع في الوثائق.
يتم تشغيل بعض معايير الأداء على كل التزام main من أجل تتبع الأداء بمرور الوقت. يتم تشغيل كل معيار ضد Postgres 14.8 و 15.3 و 16.4 و 17.0 و "الأحدث". يمثل كل سطر على الرسم البياني عدد الصفوف التي تم تشغيلها المعيار ، حاليًا 10k و 100k و 300k صف.
Backfill: الصفوف/s لإلغاء عمود نص مع placeholder القيمة. نستخدم استراتيجيتنا الافتراضية للتجميع من 10K صفوف لكل دفعة مع عدم وجود دعم.WriteAmplification/NoTrigger: صفوف/S الأساسية عند كتابة البيانات إلى جدول بدون مشغل pgroll .WriteAmplification/WithTrigger: الصفوف/s عند كتابة البيانات إلى جدول عند إعداد مشغل pgroll .ReadSchema: يتحقق من عدد عمليات الإعدام في الثانية من وظيفة read_schema التي هي وظيفة أساسية يتم تنفيذها بشكل متكرر أثناء الترحيل.يمكن رؤيتها هنا.
نرحب بالمساهمات من المجتمع! إذا كنت ترغب في المساهمة في pgroll ، فيرجى اتباع هذه الإرشادات:
بالنسبة لهذا المشروع ، نتعهد بالتصرف والتفاعل بطرق تساهم في مجتمع مفتوح ومرحّب ومتنوع وشامل وصحي.
هذه قائمة بالمشاريع والمقالات التي ساعدت كمصدر إلهام ، أو تشبه بطريقة أخرى pgroll :
تم ترخيص هذا المشروع بموجب ترخيص Apache 2.0 - راجع ملف الترخيص للحصول على التفاصيل.
إذا كان لديك أي أسئلة أو مشكلات في مواجهة أو تحتاج إلى مساعدة ، فافتح مشكلة في هذا المستودع في انضمامنا إلى خلافنا ، وسيكون مجتمعنا سعيدًا بالمساعدة.
صنعت مع ❤ بواسطة Xata؟