إنشاء وظيفة الزناد في pgModeler

في مملكة معينة ، في حالة معينة ... كنت بحاجة إلى إضافة مشغل للنموذج على pgModeler . ما يجب القيام به سهل بما فيه الكفاية. ولكن لإضافة وظيفة الزناد ... إنه أمر سهل أيضًا ، ولكن كان علي التعامل قليلاً مع المعلمات المقدمة للتعبئة / التحديد في الواجهة.

pgModeler هي أداة تصميم قاعدة بيانات جيدة جدًا يمكنها إنشاء سكربتات SQL ل PostgreSQL . يمكن العثور على تفاصيل حول هذه الأداة وقدراتها على الموقع الرسمي.

كمثال ، خذ بعين الاعتبار نموذج مبسط مع جدول واحد.



أضف وظيفة إلى النموذج.



بعد ذلك ، سيتم فتح نافذة تحتوي على معلمات متنوعة قابلة للتحرير يتم من خلالها إنشاء الوظيفة. ومع ذلك ، سيتم بالفعل ملء بعض الحقول بالقيم الافتراضية.



دعونا ننظر في هذه المعلمات بمزيد من التفصيل.

أعتقد أنه مع المعلمات الاسم والمخطط والمالك والتعليق ، كل شيء واضح - هذا هو اسم الوظيفة ومخطط قاعدة البيانات والمالك والتعليق على هذه الوظيفة ، على التوالي.

اللغة هي اسم اللغة التي سيتم تنفيذ الوظيفة بها. لنكون صادقين ، لم يكن عليّ أبدًا كتابة وظائف لـ PostgreSQL على أي شيء آخر غير plpgsql . لذلك ، كانت هذه القيمة للمعلمة التي اخترتها.

طريقة العودة . نظرًا لأنه في وظيفة الزناد ، لا نحتاج إلى إرجاع إما الجدول أو مجموعة القيم ، نترك Simple .

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

مع المعلمات المتبقية ، كل شيء ليس واضحًا ، على الأقل بالنسبة لي ، لأنه لم يكن عليك التفكير بها أثناء الإنشاء المعتاد للوظائف في PostgreSQL .

يمكن أن يأخذ نوع الوظيفة إحدى القيم الثلاث: IMMUTABLE و STABLE و VOLATILE . من وثائق PostgreSQL الرسمية ، يمكنك معرفة أن هذه الحجج تخبر مُحسِّن الاستعلام عن سلوك الوظيفة.

  • يعني IMMUTABLE أن الدالة لا يمكنها تعديل قاعدة البيانات وتعيد دائمًا نفس النتيجة لقيم معينة من الوسائط.
  • يعني STABLE أن الوظيفة لا يمكنها تعديل قاعدة البيانات ، وضمن مسح جدول واحد ، فإنها ترجع دائمًا نفس النتيجة لقيم معينة من الوسائط.
  • تعني كلمة VOLATILE أن نتيجة الوظيفة يمكن أن تتغير حتى داخل مسح جدول واحد ، لذلك لا يمكن تحسين مكالماتها.

وفقًا لذلك ، إذا كانت وظيفة المشغل تتطلب تغيير قاعدة البيانات ، فإن IMMUTABLE غير مناسب. دالة مع المعلمة STABLE غير مناسبة لمشغلات AFTER التي تريد قراءة الأسطر المعدلة بواسطة الأمر الحالي. لا يزال هناك VOLATILE ، الذي ليس لديه المشاكل المذكورة أعلاه. سيتم تحديده أيضًا بشكل افتراضي إذا لم يتم تحديد أي من الوسيطات المذكورة أعلاه عند إنشاء الوظيفة.

يمكن أن يأخذ الأمان إحدى القيمتين: مُعرِّف الأمان والأمان INVOKER وهو مسؤول عن حقوق المستخدم الذي سيتم الاتصال به.

  • يعني محدد الأمان أنه سيتم تنفيذ الوظيفة بحقوق المستخدم الذي يمتلكها ، أي الشخص الذي تم إدراجه في المالك .
  • أمان INVOKER يعني أنه سيتم تنفيذ الوظيفة مع حقوق المستخدم الذي اتصل بها.

بشكل افتراضي ، يتم استخدام INFAKER SECURITY ، بحيث يمكنك تركه.

يمكن أن يأخذ السلوك إحدى القيم الثلاث: STRICT و RETURNS NULL ON NULL INPUT و CALLED ON NULL INPUT ويظهر كيف ستتصرف الدالة إذا كانت هناك قيم NULL بين وسيطاتها.

  • إرجاع NULL على NULL INPUT أو STRICT يعني أن الدالة سترجع دائمًا NULL إذا كانت إحدى وسائطها على الأقل NULL.
  • يعني CALLED ON NULL INPUT أنه سيتم استدعاء الدالة كالمعتاد ، حتى إذا كانت NULL بين وسيطاتها.

الإعداد الافتراضي هو CALLED ON NULL INPUT . لذلك ، بنفس الطريقة ، يمكنك تركها.

تعرض "الصفوف المرتجعة " عدد الصفوف التي يتوقعها المجدول. يتم تحديد القيمة للوظائف التي تقوم بإرجاع المجموعات. لأن ترجع دالتنا قيمة واحدة ، نترك 0 .

تحدد تكلفة التنفيذ تكلفة تنفيذ هذه الوظيفة للجدولة. بالنسبة لـ plpgsql ، الإعداد الافتراضي هو 100 . لذلك ، نشير إلى هذه القيمة.

Windown فونك. يعني أنه سيتم إنشاء وظيفة النافذة. في حالتنا ، لأن نحتاج إلى وظيفة تشغيل ، ولا نحتاج إلى تحديد هذه القيمة (حسنًا ، بشكل عام ، يكتبون في الوثائق نفسها أنه من المنطقي تحديد هذه المعلمة فقط للوظائف المكتوبة في C).

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

لذلك ، انتهت معلمات الدالة. يمكن كتابة نص الوظيفة نفسها في نفس النافذة في علامة التبويب التعريف. نشرع في إنشاء الزناد نفسه.



بعد ذلك ، ستظهر نافذة إنشاء الزناد.



ضع في الاعتبار المعلمات التي يمكن تعيينها في هذه النافذة.

مع المعلمات الاسم والاسم المستعار والتعليق ، مرة أخرى ، كل شيء واضح - هذا هو اسم المشغل والاسم المستعار والتعليق على المشغل ، على التوالي.

يوضح الاستثناء كيف سيتم تنفيذ هذا المشغل ويمكن أن يأخذ إحدى القيم التالية: قبل وبعد وبعد INSTEAD OF ، مما يعني أنه سيتم تنفيذ الوظيفة قبل الحدث أو بعده أو بدلاً منه.

FOR EACH ROW يحدد ما إذا كان سيتم تشغيل إجراء الزناد مرة واحدة لكل صف. إذا لم يكن محددًا ، فسيتم تعيين المعلمة FOR EACH STATEMENT ، والتي تحدد أنه يتم تشغيل إجراء المشغل مرة واحدة لعبارة SQL.

يحدد الحدث الأحداث التي يجب معالجتها في هذا المشغل. يمكنك تحديد أحداث متعددة. الأحداث من الأنواع التالية: INSERT و UPDATE و DELETE و TRUNCATE . تحدث عندما يتم استدعاء الأمر المطابق مع نفس عبارة SQL.

يشير القيد إلى أنه سيتم إنشاء مشغل تقييد. يتم استخدام مشغلات القيد لرمي الاستثناءات عند انتهاك القيود. يمكنك قراءة المزيد عنها في الوثائق الرسمية.

بالنسبة إلى مشغل التقييد ، يمكنك تحديد تأجيل ، والذي يحدد وقت التشغيل. يمكن أن تأخذ هذه المعلمة إحدى القيم التالية: فوريًا أو تم رفضه نهائيًا .

  • يعني في الحال أن الزناد سيطلق بعد كل بيان.
  • يشير إلى أن المشغل سيتم إطلاقه في نهاية المعاملة فقط.

راجع. Table هو اسم الجدول المشار إليه بواسطة القيد. يستخدم لقيود المفتاح الخارجي ويسمح به فقط لمشغلات القيد.

الشرط هو شرط يحدد ما إذا كان سيتم تنفيذ وظيفة الزناد. بالنسبة إلى مشغلات FOR EACH ROW في هذا المجال ، يمكنك الوصول إلى القيم القديمة والجديدة من خلال OLD و NEW ، على التوالي (أي ، كما هو الحال في نص وظيفة الزناد).

الوسيطات - قائمة بالحجج التي سيتم تمريرها إلى وظيفة المشغل عندما ينطلق المشغل. يتم تمرير ثوابت السلسلة كوسيطة للدالة.

الأعمدة - يمكن تحديدها فقط لأحداث التحديث . لن يعمل الزناد إلا إذا كان أحد الأعمدة المحددة على الأقل في قائمة الأعمدة المحددة في UPDATE .

الخلاصة


هذا ، بشكل عام ، كل شيء. آمل أن يكون هذا مثيرًا للاهتمام وأن يكون مفيدًا لشخص ما.



عند كتابة هذا المقال ، تم استخدام نسخة pgModeler 0.9.2-alpha ، التي تم إنشاؤها تحت Windows 7 x64. عند استخدام إصدارات أقدم / أحدث من pgModeler ، من الممكن وجود اختلافات طفيفة في الواجهة.

يمكن تنزيل النموذج المستخدم في المقالة هنا .

Source: https://habr.com/ru/post/ar424121/


All Articles