هذا هو الجزء الثالث من المقالة الذي يصف الوظائف المعرفة من قبل المستخدم للعمل مع دلائل النظام: pg_class ، pg_attribute ، pg_constictions ، إلخ.
يناقش هذا القسم من المقالة الوظائف التي تُرجع
خصائص التسلسلات والجداول الموروثة والخصائص الخاصة لسمات الجدول .
انظر أيضًا
وظائف لتوثيق قواعد بيانات PostgreSQL. الجزء الأول
وظائف لتوثيق قواعد بيانات PostgreSQL. الجزء الثاني ؛
وظائف لتوثيق قواعد بيانات PostgreSQL. النهاية (الجزء الرابع) .
يقدم النصف الأول من المقالة تعليقات على تنفيذ الوظائف. والثاني هو رمز المصدر للوظائف. بالنسبة للقراء المهتمين فقط بالنصوص المصدر ، نقترح المتابعة الفورية للملحق .
هيكل دالة تقوم بارجاع كشف خصائص تسلسل الجدول
التين. 2. الوظائف التي تعتمد عليها وظائف admtf_Table_Sequencesالجدول 11. الغرض من الوظائف.لا. | العنوان | التعيين |
---|
1 | admtf_Sequence_Features | تُرجع الدالة قائمة بخصائص تسلسل الجدول. |
2 | admtf_Table_Sequences | تُرجع الدالة قائمة بتسلسل جدول قاعدة البيانات وخصائصها. |
دالة Admtf_Sequence_Features - قائمة خصائص تسلسل قاعدة البيانات
تعرض الدالة admtf_Sequence_Features قائمة بخصائص SEQUENCE لقاعدة البيانات. يمكن عرض كود المصدر وتنزيله هنا .
تعرض الدالة admtf_Sequence_Features قائمة بخصائص تسلسل قاعدة البيانات ( SEQUENCE )
.
كمعلمات ، تأخذ الدالة اسم التسلسل ( a_SequenceName ) واسم المخطط الذي يتم إنشاء التسلسل داخله ( a_SchemaName ).
نشأت الحاجة إلى وظيفة admtf_Sequence_Features لأن الخصائص الرئيسية للتسلسل يتم تخزينها بالفعل في جدول يتطابق اسمه مع اسم التسلسل ، ويتم استخراج البيانات منه باستخدام عبارة SELECT . في هذه الحالة ، يتم تخزين اسم التسلسل واسم المخطط والتعليق على التسلسل في دلائل pg_class و pg_namespace و pg_description .
SELECT * FROM kr_road_network_vertices_pgr_id_seq;
مالحظة 6
فصل PostgreSQL 10 خصائص التسلسل وخصائص حالاته. لهذا ، تم إدخال دليل pg_sequence بخصائص التسلسل ، يحتوي على القيمة الأولية ( start_value ) ، الزيادة ( increment_by ) والقيمة القصوى ( max_value ) للتسلسل. تم ترك القيمة الأخيرة التي تم إرجاعها بواسطة التسلسل ( last_value ) في "الجدول" باسم التسلسل.
نهاية الملاحظة.
أعتقد أن عرض كل تسلسل كمناظرة للجدول تمليه الحاجة إلى تخزين آخر قيمة مستخدمة للتسلسل ( last_value ) ، وهي خاصية لحالة التسلسل ، ولكن ليس التسلسل نفسه.
يختلف إدخال التسلسل في دليل pg_class عن إدخال الجدول حسب قيمة نوع العلاقة (relkind = 'S' ).
لاستخراج خصائص تسلسل عشوائي ، عليك استخدام SQL ديناميكي.
EXECUTE 'SELECT last_value,start_value,increment_by,max_value FROM '|| LOWER(a_SchemaName)||'.'||LOWER(a_SequenceName) INTO v_SequenceLastValue,v_SequenceStartValue, v_SequenceIncrementBy,v_SequenceMaxValue ;
الجدول 12. نتيجة تنفيذ الوظيفة admtf_Sequence_Features ('public'، 'kr_road_network_vertices_pgr_id_seq').العنوان | تعليق | الحالي | ابدأ | زيادة | النهاية |
---|
kr_road_network _vertices_pgr_id _seq | تسلسل | 138023 | 1 | 1 | 9223372036854775807 |
دالة admtf_Table_Sequences قائمة تسلسلات جدول قاعدة البيانات وخصائصها
تعرض الدالة admtf_Table_Sequences قائمة بالتسلسلات ( SEQUENCE ) لجدول قاعدة البيانات التي تولد قيم حقولها وخصائص هذه التسلسلات. يمكن عرض كود المصدر وتنزيله هنا ، وهنا نسخة من وظيفة لا تستخدم المؤشر .
كمعلمات ، تأخذ الوظيفة اسم الجدول المصدر ( a_TableName ) واسم المخطط الذي يتم إنشاء الجدول داخله (
a_SchemaName
)

كود المصدر للعامل في الشكل SELECT pseq.relname AS SequenceName,snsp.nspname AS SequenceSchemaName, COALESCE(dsc.description,', ' ||da.attname) AS SequenceDescription, d.depType AS DependcyType,da.attname AS AttributeName FROM pg_depend d INNER JOIN pg_class pseq ON d.objid = pseq.oid INNER JOIN pg_namespace snsp ON pseq.relnamespace=snsp.oid LEFT OUTER JOIN pg_Description dsc ON pseq.oid=dsc.objoid AND dsc.objsubid=0 INNER JOIN pg_class tbl ON d.refobjid = tbl.oid INNER JOIN pg_namespace nsp ON tbl.relnamespace=nsp.oid INNER JOIN pg_attribute da ON da.attrelid= d.refobjid AND da.attnum= d.refobjsubid WHERE LOWER(nsp.nspname)=LOWER(a_SchemaName) AND LOWER(tbl.relname)=LOWER(a_TableOID) AND tbl.relkind = 'r' AND pseq.relkind = 'S' ORDER BY pseq.relname;
وصف التسلسل الواحد هو مزيج من سجل في pg_class يصفه بأنه علاقة مادية وجدول شرطي باسم التسلسل الذي يحتوي على بيانات حول الخصائص المحددة للتسلسل
يتم تخزين معلومات حول العلاقة بين التسلسل والجدول المصدر في دليل نظام pg_depend .
جدول 13. خصائص الدليل pg_dependent المطلوبة لتنفيذ الوظيفة.العنوان | الوصف |
---|
اعترض | OID للتسلسل في دليل pg_class |
objsubid | يحتوي هذا الحقل على صفر |
refobjid | OID للجدول في الحقول التي يتم استخدام التسلسل |
refobjsubid | رقم سمة الجدول الذي يتم ملء قيمه باستخدام تسلسل |
بالإضافة إلى ذلك ، تصل الوظيفة إلى بيانات الكتالوج pg_namespace و pg_description لاستخراج الرسوم البيانية والتعليقات لكل من التسلسل وجدول المصدر.
لتحديد سمة جدول يتم ملء قيمه باستخدام تسلسل ، تصل الوظيفة إلى دليل pg_attribute تحت الشرط: attrelid = refobjid AND attnum = refobjsubid . (في هذه الحالة ، تتم الإشارة إلى أسماء سمات الدليل pg_dependent إلى يمين علامة المساواة).
يتم استرداد الخصائص الخاصة لتسلسل الجدول في حلقة عن طريق استدعاء admtf_Sequence_Features . يتم استخدام الدورة لأنه يمكن تعيين أكثر من تسلسل لملء حقول الجدول.
جدول 14. نتيجة تنفيذ الوظيفة admtf_Table_Sequences ('public'، 'kr_road_network_vertices_pgr').العنوان | تعليق | ابدأ | زيادة | النهاية | المجال |
---|
kr_road_network _vertices_pgr_id _seq | إنشاء تسلسل قيم حقل المعرف | 1 | 1 | 9223372036854775807 | معرف |
إصدار بدون مؤشر
في بيئة PostgreSQL التي يكون إصدارها أقل من 10 ، فمن المحتمل أن يكون من المستحيل تنفيذ وظيفة admtf_Table_Sequences بدون استخدام المؤشر.
لكن يمكن للمالكين المحظوظين للإصدار 10 الاستغناء عن المؤشر ، لأن لديهم دليل pg_sequence تحت تصرفهم. في هذه الحالة ، يمكن استرجاع كل خصائص التسلسل باستخدام عبارة SELECT واحدة.
في تنفيذ الوظيفة المحددة ، باستخدام دالة النافذة RANK () OVER (PARTITION BY pseq.relname) ، يتم حساب رقم التسلسل المتسلسل المستخدم لملء جدول المصدر.

كود المصدر للعامل في الشكل SELECT RANK() OVER (PARTITION BY pseq.relname) AS SequenceNo, pseq.relname AS SequenceName,snsp.nspname AS SequenceSchemaName, COALESCE(dsc.description,', ' ||da.attname) AS SequenceDescription, seq.seqstart AS SequenceStartValue,seq.seqincrement AS SequenceIncrementBy, seq.seqmax AS SequenceMaxValue, d.depType AS DependcyType,da.attname AS AttributeName FROM pg_depend d INNER JOIN pg_class pseq ON d.objid = pseq.oid INNER JOIN pg_sequence seq ON seq.seqrelid= pseq.oid INNER JOIN pg_namespace snsp ON pseq.relnamespace=snsp.oid LEFT OUTER JOIN pg_Description dsc ON pseq.oid=dsc.objoid AND dsc.objsubid=0 INNER JOIN pg_class tbl ON d.refobjid = tbl.oid INNER JOIN pg_namespace nsp ON tbl.relnamespace=nsp.oid INNER JOIN pg_attribute da ON da.attrelid= d.refobjid AND da.attnum= d.refobjsubid WHERE LOWER(nsp.nspname)=LOWER(a_SchemaName) AND LOWER(tbl.relname)=LOWER(a_TableOID) AND tbl.relkind = 'r' AND pseq.relkind = 'S' ORDER BY pseq.relname;
الملاحظة 7
.
لا يُرجع هذا الإصدار من الدالة القيمة الأخيرة التي تم إنشاؤها بواسطة التسلسل ( last_value ).
نهاية الملاحظة.
دالة Admtf_Table_InheritanceChildrens - قائمة خصائص الجداول الموروثة
تُرجع الدالة admtf_Table_InheritanceChildrens قائمة بخصائص الجداول الموروثة ( INHERITS ) لجدول قاعدة البيانات. يمكن عرض كود المصدر وتنزيله هنا .
كمعلمات ، تأخذ الدالة اسم الجدول المصدر ( a_TableName ) واسم المخطط الذي يتم إنشاء الجدول داخله ( a_SchemaName ).
وصف جدول قديم واحد موجود في الإدخال في pg_class . ولكن للبحث عن الجداول الموروثة باسم جدول المصدر ، يجب عليك استخدام كتالوج النظام pg_dependent .
جدول 15. خصائص الدليل pg_dependent المطلوبة لتنفيذ الوظيفة.العنوان | الوصف |
---|
اعترض | OID للجدول الموروث في دليل pg_class |
refobjid | OID لجدول المصدر |

كود المصدر للعامل في الشكل SELECT rtbl.relname,rnspc.nspname,rdsc.description,rtbl.relnatts::INTEGER, rtbl.relchecks::INTEGER, rtbl.relhaspkey,rtbl.relhasindex,rtbl.relhassubclass, rtbl.reltuples::INTEGER FROM pg_class tbl INNER JOIN pg_namespace nspc ON tbl.relnamespace = nspc.oid LEFT OUTER JOIN pg_Description dsc ON tbl.oid=dsc.objoid AND dsc.objsubid=0 INNER JOIN pg_depend dp ON tbl.oid=dp.refobjid INNER JOIN pg_class rtbl ON rtbl.OID=dp.objid INNER JOIN pg_namespace rnspc ON rtbl.relnamespace = rnspc.oid LEFT OUTER JOIN pg_Description rdsc ON rtbl.oid=rdsc.objoid AND rdsc.objsubid=0 WHERE LOWER(nspc.nspname)=LOWER(a_SchemaName) AND LOWER(tbl.relname)=LOWER(a_TableOID) AND tbl.relkind = 'r' AND rtbl.relkind = 'r' ORDER BY rtbl.relname;
بالإضافة إلى ذلك ، تصل الوظيفة إلى بيانات الدليل pg_namespace و pg_description من أجل استخراج المخططات والتعليقات لكل من الجدول الموروث والجدول المصدر.
الجدول 16. نتيجة تنفيذ الوظيفة admtf_Table_InheritanceChildrens ('public'، 'np_house').العنوان | تعليق | السمات | ؟؟؟ المفتاح الأساسي | ؟؟؟ المؤشرات | ؟؟؟ أحفاد | عدد السجلات |
---|
np_house 04201000000 | منازل في المستوطنات (منطقة أتشينسكي) | 15 | و | و | و | 5651 |
np_house 4208000.000 | منازل في المستوطنات (منطقة بوغوتولسكي) | 15 | و | و | و | 4314 |
يتم تحديد عدد السجلات في الجدول الذي تم إنشاؤه من السمة reltuple للدليل pg_class. وعلى الرغم من أن هذه القيمة غالبًا ما تتطابق تمامًا مع العدد الفعلي للإدخالات في الجدول ، إلا أنها لا تزال قيمة تقديرية. لذا ، قد ترغب في الحصول على القيمة الدقيقة نتيجة لذلك. على سبيل المثال ، كما هو موضح في الشكل.
EXECUTE 'SELECT COUNT(*) FROM '||LOWER(a_SchemaName)||'.'||LOWER(a_TableName) INTO v_TableNumberOfRowCalc;
ولكن ، أولاً ، من أجل تحقيق هذا البيان في النص ، سيتعين على الدالة admtf_Table_InheritanceChildrens استخدام المؤشر.
ثانيًا ، أرغب في أن تعرض الوظيفة كلاً من العدد المُقدَّر والعدد الدقيق لإدخالات الجدول.
لذلك ، تحتوي الوظيفة على معلمة اختيارية أخرى - وضع الحصول على عدد إدخالات الجدول ( a_Mode ) ، والتي تأخذ القيم "تقدير" ( تقدير ) أو "بالضبط" ( بالضبط ).
بالإضافة إلى ذلك ، تم إنشاء وظيفة admfn_Table_RowCount ، والتي تُرجع العدد الدقيق لإدخالات الجدول ، ويتم استبدال السمة reltuple في قائمة الإرجاع SELECT بالبناء التالي.

كود المصدر للعامل في الشكل CASE WHEN a_Mode = 'exactly' THEN admfn_Table_RowCount(rnspc.nspname,rtbl.relname) ELSE reltuples END
ونتيجة لذلك ، تقوم الدالة بإرجاع القيمة المقدرة للمؤشر "عدد إدخالات الجدول" إذا لم تحدد المعلمة a_Mode متطلبات إرجاع القيمة الدقيقة.
هيكل دالة تقوم بارجاع كشف خصائص الجدول
التين. 3. الوظائف التي تقبل المكالمات
نسخة نصية من الجدول في الشكلالجدول 17. الغرض من الوظائف.لا. | العنوان | التعيين |
---|
1 | admtf_Attribute_PK الميزات | تُرجع الدالة سمة حضور السمة في المفتاح الأساسي (PRIMARY KEY) ، بالإضافة إلى بعض خصائصها كجزء من هذا المفتاح. |
2 | admtf_Attribute_FK الميزات | تقوم الدالة بإرجاع سمة حضور السمة في المفتاح الخارجي (مفتاح FOREIGN) ، بالإضافة إلى بعض خصائصها كجزء من هذا المفتاح. |
3 | admtf_Attribute_Features | تعرض الدالة قائمة بخصائص سمات الجدول. |
الوظيفة admtf_Attribute_PKFeatures - - ما إذا كانت السمة موجودة في المفتاح الأساسي
تعرض الدالة admtf_Attribute_PKFeatures علامة على وجود سمة جدول في المفتاح الأساسي (المفتاح الأساسي) للجدول ، وإذا كان موجودًا ، فما هو الرقم التسلسلي في هذا المفتاح ، حيث يمكن أن يكون المفتاح الأساسي مركب.
يمكن عرض كود المصدر وتنزيله هنا .
كمعلمات ، تأخذ الدالة OID لجدول المصدر ( a_TableOID ) والرقم التسلسلي للسمة المطلوبة فيه ( a_AttributeNo ).
تستخرج الوظيفة البيانات المطلوبة من إدخال دليل pg_constraint الذي يحتوي على قيود (CONSTRAINT) لجدول المصدر ، بما في ذلك قيد المفتاح الأساسي. يتم تخزين معرّف الكائن ( OID) للجدول المطلوب في الحقل المرتبط ، ويتم تخزين وصف المفتاح الأساسي في سجل يحتوي فيه حقل النمط على القيمة "" p "
.
SELECT INTO v_PKAttributeList,rs_isAttributePK conkey,ARRAY[a_AttributeNo]<@conkey FROM pg_constraint c WHERE c.contype='p' AND c.conrelid=a_TableOID;
يحتوي حقل المفتاح ، الموجود بهذه الطريقة ، على مجموعة من أرقام السمات التي تشكل المفتاح الأساسي. لذلك ، للتحقق من وجود السمة المصدر في المفتاح الأساسي ، يكفي لحساب التعبير المنطقي ARRAY [a_AttributeNo] <@ conkey .
إذا كانت السمة موجودة في المفتاح الأساسي ، فسيتم حساب رقم التسلسل الخاص بها في الحلقة.
الوظيفة admtf_Attribute_FKFeatures - ما إذا كانت السمة موجودة في المفتاح الخارجي
تُرجع الدالة admtf_Attribute_FKFeatures علامة وجود سمة جدول في مفتاح خارجي واحد أو أكثر (مفتاح أجنبي) للجدول ، وإذا كانت موجودة ، ما هي أرقام تسلسلها في هذه المفاتيح ، لأن يمكن أن يكون المفتاح الأجنبي مركبًا.
يمكن عرض كود المصدر وتنزيله هنا .
كمعلمات ، تأخذ الدالة OID لجدول المصدر ( a_TableOID ) والرقم التسلسلي للسمة المطلوبة فيه ( a_AttributeNo ).
تسترد الوظيفة البيانات المطلوبة من إدخال دليل pg_constraint الذي يحتوي على CONSTRAINT لجدول المصدر ، بما في ذلك ، على سبيل المثال لا الحصر ، قيود المفتاح الخارجي. يتم تخزين معرّف الكائن ( OID) للجدول المطلوب في الحقل المرتبط ، ويتم تخزين وصف المفتاح الأساسي في سجل يحتوي فيه حقل النمط على القيمة '' f '
.
SELECT * FROM pg_constraint c WHERE c.contype='f ' AND c.conrelid=a_TableOID AND ARRAY[a_AttributeNo]<@conkey ORDER BY c.oid;
يحتوي حقل conkey ، الموجود بهذه الطريقة ، على مجموعة من أرقام السمات التي تشكل المفتاح الخارجي. لذلك ، من أجل التحقق من وجود السمة المصدر في المفتاح الخارجي ، يكفي لحساب التعبير المنطقي ARRAY [a_AttributeNo] <@ conkey .
إذا كانت السمة موجودة في المفتاح الخارجي ، فعندئذٍ تتشكل في الحلقة مجموعة من أرقام تسلسلها في المفاتيح الخارجية التي تحتوي عليها. بالإضافة إلى ذلك ، يتم تكوين صفيفين آخرين من أسماء الجداول وسماتها ، والتي يتم الرجوع إليها بواسطة سمة المصدر في المفاتيح الخارجية التي تحتوي عليها.
يتم استرداد أسماء الجداول من إدخال دليل pg_class من خلال المعرف (OID) الذي تم استرجاعه من الحقل المرتبط لإدخال المفتاح الخارجي.
للحصول على اسم سمة الجدول الخارجي ، استخدم مجموعة من الأرقام التسلسلية من الحقل
كونكي
(يختلف عن المصفوفة أعلاه بالحرف "
f " في الاسم). يتم استخراج الرقم التسلسلي لسمة الجدول الخارجي التي تتوافق معها السمة الخارجية من هذا الصفيف. من خلال هذا الرقم التسلسلي لسمة الجدول الخارجي و OID الخاص به ، الموجود في دليل pg_attribute ، يوجد إدخال لوصف السمة ويتم استرداد اسمها.
دالة Admtf_Attribute_Features - قائمة خصائص سمات الجدول
تعرض الدالات admtf_Attribute_Features قائمة بخصائص سمات الجدول التالية. يمكن عرض كود المصدر وتنزيله هنا .

نسخة النص من الجدول في الشكللا. | العنوان | اكتب | التعيين |
---|
1 | اسم السمة | الاسم | اسم سمة المصدر. |
2 | اسم المستخدم | فاركار (256) | نوع سمة المصدر المخصص |
3 | اسم الملف | فاركار (256) | النوع الأساسي لسمة المصدر |
4 | isNotNULL | BOOLEAN | ؟؟؟ صلاحية فارغة |
5 | isAttributePK | BOOLEAN | ؟؟؟ المشاركة في PK |
6 | العمود PK | سمالينت | السمة الرقم التسلسلي في PK |
7 | الوصف | النص | التعليق على سمة المصدر |
8 | isAttributeFK | BOOLEAN | ؟؟؟ المشاركة في FK |
9 | FKeyName | الاسم [] | صفيف من أسماء جدول القيد التي يتم فيها تعريف المفتاح الخارجي |
10 | العمود FK | سمالينت [] | صفيف من أرقام تسلسل السمات في المفاتيح الخارجية للجدول |
11 | FKTableName | الاسم [] | صفيف الجداول المشار إليها بواسطة المفاتيح الخارجية |
12 | FKTableColumnName | الاسم [] | صفيف من أسماء السمات في الجداول الخارجية المقابلة لسمة المصدر |
كمعلمات ، تأخذ الدالة OID لجدول المصدر ( a_TableOID ) والرقم التسلسلي للسمة المطلوبة فيه ( a_AttributeNo ).
يتم استرداد قيم حقلي AttributeName و isNotNULL من إدخال دليل pg_attribute المقابل لقيم معلمات الإدخال.
SELECT attr.attname, attr.attnotnull FROM pg_attribute attr WHERE attr.attrelid =a_TableOID AND attr.attnum=a_AttributeNo; SELECT rs_isAttributePK,rs_ColumnPKNo FROM admtf_Attribute_PKFeatures (a_TableOID,a_AttributeNo); SELECT rs_isAttributeFK,rs_FKeyName,rs_ColumnFKNo, rs_FKTableName,rs_FKTableColumnName FROM admtf_Attribute_FKFeatures (a_TableOID,a_AttributeNo);
يتم إرجاع قيم حقلي isAttributePK و ColumnPKNo بواسطة الدالة admtf_Attribute_PKFeatures .
يتم إرجاع قيم الحقول isAttributeFK و FKeyName و ColumnFKNo و FKTableName و FKTableColumnName بواسطة الدالة admtf_Attribute_FKFeatures .
سيؤدي استدعاء admtf_Attribute_Features ((SELECT OID FROM pg_class WHERE relname = 'street')، 2 :: SMALLINT) إلى النتيجة التالية.
جدول 18. نتيجة تنفيذ الوظيفة admtf_Attribute_Featuresاسم السمة | اسم المستخدم | اسم الملف | isNotNULL | isAttributePK | العمود PK |
---|
محلية | محلية | عدد صحيح | عدد صحيح | عدد صحيح | عدد صحيح |
الوصف | isAttributeFK | FKeyName | العمود FK | FKTableName | FKTableColumnName |
---|
هوية المجتمع | ر | {fk_street_locality} | {2} | {locality} | {localityid} |
الملحق 1. النصوص
إنشاء وظيفة admtf_Sequence_Features
يمكن العثور على التعليقات على رمز مصدر الوظيفة هنا.رمز الوظيفة BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Sequence_Features (a_SchemaName NAME,a_SequenceName NAME); CREATE OR REPLACE FUNCTION admtf_Sequence_Features (a_SchemaName NAME default 'public', a_SequenceName NAME default NULL ) RETURNS TABLE (rs_SequenceName NAME,rs_SequenceDescription TEXT,rs_NumberOfAttribute INTEGER,rs_SequenceLastValue BIGINT, rs_SequenceStartValue BIGINT,rs_SequenceIncrementBy BIGINT,rs_SequenceMaxValue BIGINT) AS $BODY$ DECLARE c_SequenceKind CONSTANT CHAR:='S'; v_SequenceOID OID; v_SequenceName NAME; v_SequenceDescription TEXT; v_SequenceStartValue BIGINT; v_SequenceIncrementBy BIGINT; v_SequenceMaxValue BIGINT; v_SequenceLastValue BIGINT; v_SequenceNumberOfRowCalc INTEGER;
إنشاء دالة admtf_Table_Sequences
يمكن العثور على التعليقات على رمز مصدر الوظيفة هنا.رمز الوظيفة BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Table_Sequences (a_SchemaName NAME, a_TableName NAME); CREATE OR REPLACE FUNCTION admtf_Table_Sequences (a_SchemaName NAME default 'public', a_TableName NAME default NULL ) RETURNS TABLE (r_SequenceNumber SMALLINT,r_SequenceName NAME, r_SequenceSchemaName NAME,r_SequenceDescription TEXT, r_SequenceStartValue BIGINT,r_SequenceIncrementBy BIGINT, r_SequenceMaxValue BIGINT,r_DependType NAME, r_RefTableName NAME,r_RefTableSchemaName NAME, r_RefAttributeName NAME) AS $BODY$ DECLARE v_TableOID INTEGER; v_Sequence RECORD; v_SequenceOID INTEGER; v_SequenceName NAME; v_SequenceSchemaName NAME; v_SequenceDescription TEXT; v_SequenceStartValue BIGINT; v_SequenceIncrementBy BIGINT; v_SequenceMaxValue BIGINT; v_DependcyType NAME; v_AttributeName NAME; v_SequenceNumber SMALLINT; c_Delimiter CONSTANT VARCHAR(2):=',';
إنشاء دالة admtf_Table_Sequences بدون مؤشر (PostgreSQL 10)
يمكن العثور على التعليقات على رمز مصدر الوظيفة هنا.رمز الوظيفة BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Table_Sequences (a_SchemaName NAME, a_TableName NAME); CREATE OR REPLACE FUNCTION admtf_Table_Sequences (a_SchemaName NAME default 'public', a_TableName NAME default NULL ) RETURNS TABLE (r_SequenceNumber SMALLINT,r_SequenceName NAME, r_SequenceSchemaName NAME,r_SequenceDescription TEXT, r_SequenceStartValue BIGINT,r_SequenceIncrementBy BIGINT, r_SequenceMaxValue BIGINT,r_DependType NAME, r_RefTableName NAME,r_RefTableSchemaName NAME, r_RefAttributeName NAME) AS $BODY$ DECLARE v_TableOID INTEGER; v_Sequence RECORD; v_SequenceOID INTEGER; v_SequenceName NAME; v_SequenceSchemaName NAME; v_SequenceDescription TEXT; v_SequenceStartValue BIGINT; v_SequenceIncrementBy BIGINT; v_SequenceMaxValue BIGINT; v_DependcyType NAME; v_AttributeName NAME; v_SequenceNumber SMALLINT; c_Delimiter CONSTANT VARCHAR(2):=',';
إنشاء وظيفة admfn_Table_RowCount
يمكن العثور على التعليقات على رمز مصدر الوظيفة هنا.رمز الوظيفة BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admfn_Table_RowCount (a_SchemaName NAME,a_TableName NAME); CREATE OR REPLACE FUNCTION admfn_Table_RowCount (a_SchemaName NAME default 'public', a_TableName NAME default NULL ) RETURNS BIGINT AS $BODY$ DECLARE v_TableNumberOfRowCalc BIGINT; v_Found BOOLEAN;
إنشاء دالة admtf_Table_InheritanceChildrens
يمكن العثور على التعليقات على رمز مصدر الوظيفة هنا.رمز الوظيفة BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Table_InheritanceChildrens (a_SchemaName NAME,a_TableName NAME,a_Mode VARCHAR(10)); CREATE OR REPLACE FUNCTION admtf_Table_InheritanceChildrens (a_SchemaName NAME default 'public', a_TableName NAME default NULL, a_Mode VARCHAR(10) default 'estimate' ) RETURNS TABLE (rs_TableName NAME,rs_TableDescription TEXT, rs_NumberOfAttribute INTEGER,rs_NumberOfChecks INTEGER, rs_hasPKey BOOLEAN,rs_hasIndex BOOLEAN, rs_hasSubClass BOOLEAN,rs_NumberOfRow INTEGER) AS $BODY$ DECLARE c_TableKind CONSTANT CHAR:='r'; c_ExactlyMode CONSTANT VARCHAR(10):='exactly'; c_EstimateMode CONSTANT VARCHAR(10):='estimate'; v_TableOID OID; v_SchemaName NAME; v_TableName NAME; v_TableDescription TEXT; v_TableNumberOfRowCalc INTEGER; v_InheritanceRECORD RECORD; v_InheritanceOID OID; BEGIN RETURN QUERY SELECT rtbl.relname,rdsc.description,rtbl.relnatts::INTEGER, rtbl.relchecks::INTEGER,rtbl.relhaspkey,rtbl.relhasindex, rtbl.relhassubclass, CASE WHEN a_Mode=c_ExactlyMode THEN admfn_Table_RowCount(rnspc.nspname,rtbl.relname)::INTEGER ELSE rtbl.reltuples::INTEGER END FROM pg_class tbl INNER JOIN pg_namespace nspc ON tbl.relnamespace = nspc.oid LEFT OUTER JOIN pg_Description dsc ON tbl.oid=dsc.objoid AND dsc.objsubid=0 INNER JOIN pg_depend dp ON tbl.oid=dp.refobjid INNER JOIN pg_class rtbl ON rtbl.OID=dp.objid INNER JOIN pg_namespace rnspc ON rtbl.relnamespace = rnspc.oid LEFT OUTER JOIN pg_Description rdsc ON rtbl.oid=rdsc.objoid AND rdsc.objsubid=0 WHERE nspc.nspname=LOWER(a_SchemaName) AND tbl.relkind=c_TableKind AND rtbl.relkind=c_TableKind AND tbl.relname =LOWER(a_TableName) ORDER BY rtbl.relname; END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admtf_Table_InheritanceChildrens(a_SchemaName NAME,a_TableName NAME,a_Mode VARCHAR(10)) IS ' ';
إنشاء وظيفة admtf_Attribute_PKFeatures
يمكن العثور على التعليقات على رمز مصدر الوظيفة هنا.رمز الوظيفة BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Attribute_PKFeatures (a_TableOID OID,a_AttributeNo SMALLINT); CREATE OR REPLACE FUNCTION admtf_Attribute_PKFeatures (a_TableOID OID, a_AttributeNo SMALLINT ) RETURNS TABLE (rs_isAttributePK BOOLEAN,rs_PKeyName name,rs_ColumnPKNo SMALLINT) AS $BODY$ DECLARE C_PKAttributeList_NDims CONSTANT INTEGER:=1; v_PKAttributeList SMALLINT[]; v_PKAttributeIndx INTEGER; v_PKAttributeLBound INTEGER; v_PKAttributeUBound INTEGER;
إنشاء وظيفة admtf_Attribute_FKFeatures
يمكن العثور على التعليقات على رمز مصدر الوظيفة هنا.رمز الوظيفة BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Attribute_FKFeatures (a_TableOID OID,a_AttributeNo SMALLINT); CREATE OR REPLACE FUNCTION admtf_Attribute_FKFeatures (a_TableOID OID, a_AttributeNo SMALLINT ) RETURNS TABLE (rs_isAttributeFK BOOLEAN,rs_FKeyName name[],rs_ColumnFKNo SMALLINT[],rs_FKTableName name[],rs_FKTableColumnName name[]) AS $BODY$ DECLARE C_FKAttributeList_NDims CONSTANT INTEGER:=1; v_FKAttributeList SMALLINT[]; v_RefAttributeList SMALLINT[]; v_FKAttributeIndx INTEGER; v_RefAttributeListIndx INTEGER; v_FKAttributeLBound INTEGER; v_FKAttributeUBound INTEGER; v_FKConstraintIndx INTEGER; v_FKeyName name; v_FKTableName name; v_FKTableColumnName name; v_RefAttributeNo SMALLINT; v_Constraint pg_constraint%ROWTYPE;
إنشاء وظيفة admtf_Attribute_Features
يمكن العثور على التعليقات على رمز مصدر الوظيفة هنا.رمز الوظيفة BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Attribute_Features (a_TableOID OID,a_AttributeNo SMALLINT); CREATE OR REPLACE FUNCTION admtf_Attribute_Features (a_TableOID OID, a_AttributeNo SMALLINT ) RETURNS TABLE (rsa_AttributeName name,rsa_UserTypeName VARCHAR(256),rsa_TypeName VARCHAR(256),rsa_isNotNULL BOOLEAN,rsa_isAttributePK BOOLEAN, rsa_ColumnPKNo SMALLINT,rsa_Description Text,rsa_isAttributeFK BOOLEAN,rsa_FKeyName name[],rsa_ColumnFKNo SMALLINT[],rsa_FKTableName name[],rsa_FKTableColumnName name[]) AS $BODY$ DECLARE v_Return_Error Integer := 0;
انظر أيضًا
وظائف لتوثيق قواعد بيانات PostgreSQL. جزء واحد .وظائف لتوثيق قواعد بيانات PostgreSQL. الجزء الثاني .وظائف لتوثيق قواعد بيانات PostgreSQL. النهاية (الجزء الرابع) .